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