お尋ねの趣旨が、そもそも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 件のコメント:
コメントを投稿