
画像の抽出指定されたページ内の指定されたインデックス番号の画像を書き出します。
ページ番号と画像のインデックス番号を入力して、指定された画像を画像ファイルとして書き出します。出力のフォルダパスとファイル名(ボディ部)は入力時に指定する必要があります。画像形式は自動で決定され、拡張子がボディ部に付けられた状態で出力されます。
PtlEditElements.APIget(int index): indexと一致する番号のEditElementを取得
PtlEditElement: コンテントに描画されるエレメントを表現したクラス。すべてのエレメントクラスのベースクラス
PtlEditImage: コンテントに描画される画像を表現したクラス
PtlEditImage.APIwriteFile(PtlParamOutput output, PtlEditImage.OUTPUT_FORMAT format): PtlParamOutputで指定したパスに画像を書き出す
package cookbook;
import jp.co.antenna.ptl.*;
public class ExtractImageSimple {
// そのクラスのusageを表示する関数
private static void printUsage(){
System.out.println("usage: java ExtractImageSimple in-pdf-file out-image-body" +
" page-to-extract image-index-num");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 4) {
printUsage();
return;
}
// コマンドライン引数の取得
int pageToExtract = Integer.parseInt(args[2]);
int imageIndexNum = Integer.parseInt(args[3]);
try (PtlParamInput inputFile = new PtlParamInput(args[0]);
PtlPDFDocument doc = new PtlPDFDocument()) {
// PDFファイルをロードします。
doc.load(inputFile);
try (PtlPages pages = doc.getPages()) { // ページコンテナの取得
// ページコンテナが空かどうか
if (pages.isEmpty()) {
System.out.println("ページコンテナが空");
return;
}
// それ以外であれば指定ページ番号を検索。
int wholePageNum = doc.getPageCount();
//pageToSearchのエラー処理
if(wholePageNum < pageToExtract) {
System.out.println("ERROR: page-to-extractはPDFの総ページ数より"+
"小さい値を指定してください。");
System.out.println("総ページ数:" + wholePageNum);
printUsage();
return;
}
// ページの取得(index番号は0が先頭のため1を引く)
try (PtlPage page = pages.get(pageToExtract - 1)) {
// 画像抽出
extractImageSimple(page, args[1], imageIndexNum);
}
}
}
...【ExtractText.javaと同じ処理のため省略
・エラーメッセージ処理と出力】...
}
public static void extractImageSimple(PtlPage page, String imagefileName,
int imageIndexNum)
throws PtlException, Exception, Error {
// ページコンテント・画像エレメントの取得
try (PtlContent content = page.getContent();
PtlEditElements elems = content.getEditElements(PtlContent.GET_IMAGE)) {
int numElems = elems.getCount();
if (numElems == 0) {
System.out.println("指定されたページに画像エレメントがありませんでした。");
return; // 画像エレメントが無い場合はreturnする
}
//imageIndexNumのエラー処理
if(numElems < imageIndexNum) {
System.out.println("ERROR: image-index-numは対象ページの総画像数より"+
"小さい値を指定してください。");
System.out.println("総画像数:" + numElems);
printUsage();
return;
}
// OUTPUT_FORMATはFORMAT_AUTOで設定。
PtlEditImage.OUTPUT_FORMAT format = PtlEditImage.OUTPUT_FORMAT.FORMAT_AUTO;
// 画像エレメントの取得
try (PtlEditElement elem = elems.get(imageIndexNum - 1)) {
PtlEditElement.ELEMENT_TYPE type = elem.getType();
switch (type) {
case TYPE_IMAGE:
PtlEditImage elemImage = (PtlEditImage)elem;
try (PtlParamOutput outputImage = new PtlParamOutput(imagefileName)) {
// 画像出力
elemImage.writeFile(outputImage, format);
}
break;
default:
System.out.println("指定されたエレメントは画像ではありません。");
break;
}
}
}
}
}
ExtractImageSimple.java
C:\samples>java cookbook.ExtractImageSimple usage: java ExtractImageSimple in-pdf-file out-image-body page-to-extract image-index-num C:\samples>java cookbook.ExtractImageSimple colorImg.pdf outputImgSimple 1 2 -- 完了 --

colorImg.pdfファイルの1ページには二つの画像があり、その2番目の画像を抽出します。