2012年11月26日月曜日

PDFBox

お尋ねの趣旨が、そもそもPDFBoxの基本的な利用方法に関する部分なのか、日本語文書でのテキスト抽出のためのPDFBoxのCMapに関する変更部分なのか、よくわかりませんので、一応、どちらも掲示しておきます。

(1) PDFBoxの基本的な利用方法

// 対象文書のInputStreamを作成します。
// とりあえずFileInputStreamクラスの例ですが、もちろん用途に応じて他のクラスでもいいでしょう。
InputStream inputStream = null;
try {
inputStream = new FileInputStream("対象文書のパス");
} catch (FileNotFoundException e) {
// 必要に応じたエラー処理
}

// PDDocumentオブジェクトを作成します。
PDDocument pdfDoc = null;
try {
pdfDoc = PDDocument.load(inputStream);
} catch (IOException e) {
// 必要に応じたエラー処理
}

// PDDocumentオブジェクトのテキストを抽出します。
String textInPDF = null; // 抽出テキスト
PDFTextStripper textStripper = new PDFTextStripper();
try {
textInPDF = textStripper.getText(pdfDoc);
} catch (IOException e) {
// 必要に応じたエラー処理
}


(2) 日本語処理のための変更内容

org.pdfbox.pdmodel.font.PDFontのstaticイニシャライザーに、以下を追加しました。その上で、PDFBoxの全体をビルドし直して使用しています。
cmapSubstitutions.put("90ms-RKSJ-H", "90ms-RKSJ-UCS2");
cmapSubstitutions.put("90ms-RKSJ-V", "90ms-RKSJ-UCS2");
cmapSubstitutions.put("90msp-RKSJ-H", "90ms-RKSJ-UCS2");
cmapSubstitutions.put("90msp-RKSJ-V", "90ms-RKSJ-UCS2");
cmapSubstitutions.put("90pv-RKSJ-H", "90pv-RKSJ-UCS2");
cmapSubstitutions.put("Adobe-Japan1-4", "Adobe-Japan1-UCS2");

但し、たまたま、こちらで発生した現象は回避できていますが、この処置が完全に正しいのかどうかは不明瞭です(要は私もよくわかっていません)。

0 件のコメント:

コメントを投稿