2010年09月25日 16:55
はじめに
JavaでPDFを操作するライブラリの中で,「PDFBox」に触れてみる特長は
- PDFファイルからのテキストの抽出
- PDFファイルの結合
- PDFファイルの暗号・複合化
- 検索エンジン Lucene の組み込み
- FDFデータの埋め込み
- イメージをPDFに変換
- PDFからのイメージ取得
準備
Apache PDFBox - Download からダウンロード※今回は,「pdfbox-1.4.0.jar」
使ってみる
PDFファイルの読み込みFileInputStream pdfStream = new FileInputStream(readFile); PDFParser pdfParser = new PDFParser(pdfStream); pdfParser.parse(); // 分析 PDDocument pdf = pdfParser.getPDDocument();
PDFファイルの書き込み
FileOutputStream stream = new FileOutputStream(writeFile); COSWriter writer = new COSWriter(stream); writer.write(pdf);
PDFからイメージを抽出
PDDocumentCatalog docCatalog = pdf.getDocumentCatalog(); PDAcroForm acroForm = docCatalog.getAcroForm(); PDField field = acroForm.getField(name); // フィールド取得 if (field != null) { field.setValue(value); // フィールドに埋め込み }
PDFファイルの読み込み
FileInputStream pdfStream = new FileInputStream(readFile); PDFParser pdfParser = new PDFParser(pdfStream); pdfParser.parse(); // 分析 PDDocument pdf = pdfParser.getPDDocument(); int imageCounter = 1; List pages = pdf.getDocumentCatalog().getAllPages(); Iterator iter = pages.iterator(); while (iter.hasNext()) { // 全ページからイメージを抽出 PDPage page = (PDPage) iter.next(); PDResources resources = page.getResources(); Map images = resources.getImages(); if (images != null) { Iterator imageIter = images.keySet().iterator(); while (imageIter.hasNext()) { String key = (String) imageIter.next(); PDXObjectImage image = (PDXObjectImage) images.get(key); String name = key + "-" + imageCounter; imageCounter++; System.out.println("Writing image:" + name); image.write2file(name); // ファイル出力 } } }
【参考】
◇JAVA開発メモ
JavaでPDFの文章を抽出するには、「PDFBox」 というAPIを用いる.
・JavaでPDFから文章を抽出
【結果】
①全文英語PDF ⇒ 抽出できた
(文章が、途中からの抽出だった。コンソールのバッファサイズの問題かも←あるのか?)
②全文日本語PDF ⇒ 抽出できた
③パワーポイントファイルをPDFファイル化したもの ⇒ 抽出できた
まだ、よくわからないが、PDFファイルのサイズ や 文字量の上限があるのかもしれない.
※インポートは「pdfbox-1.2.1-src.zip」ではバグが発生するので、「pdfbox-app-1.2.1.jar」を選択する.
・JavaでPDFから文章を抽出
【結果】
①全文英語PDF ⇒ 抽出できた
(文章が、途中からの抽出だった。コンソールのバッファサイズの問題かも←あるのか?)
②全文日本語PDF ⇒ 抽出できた
③パワーポイントファイルをPDFファイル化したもの ⇒ 抽出できた
まだ、よくわからないが、PDFファイルのサイズ や 文字量の上限があるのかもしれない.
※インポートは「pdfbox-1.2.1-src.zip」ではバグが発生するので、「pdfbox-app-1.2.1.jar」を選択する.
import java.io.*; import org.apache.pdfbox.pdfparser.PDFParser; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.util.PDFTextStripper; public class ExtractPDF { static String extractText(String filePath){ ByteArrayOutputStream out = null; try { FileInputStream pdfStream = new FileInputStream(filePath); PDFParser parser = new PDFParser(pdfStream); parser.parse(); PDDocument pdf = parser.getPDDocument(); PDFTextStripper stripper = new PDFTextStripper(); out = new ByteArrayOutputStream(); stripper.writeText(pdf, new BufferedWriter(new OutputStreamWriter(out))); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return out.toString(); } public static void main(String[] args){ String pdfFile = "〇〇.pdf"; String data=null; data = extractText(pdfFile); System.out.println(data); } }
コメント
コメントの投稿