次のコードは、ある PDF ではスペースの代わりに特殊文字を生成しますが、別の PDF では生成しません。
String fullText;
BodyContentHandler handler = null;
try {
// size is limit is 100M
handler = new BodyContentHandler(100 * 1024 * 1024);
Metadata meta = new Metadata();
PDFParser parser = new PDFParser();
parser.setEnableAutoSpace(false);
parser.parse(new FileInputStream(this.pdf /*always a valid pdf file*/), handler, meta, new ParseContext());
}
catch (SAXException e) {
throw new IOException(e);
} catch (TikaException e) {
throw new IOException(e);
}
fullText = handler.toString();
PDF に応じて、fullText の部分文字列は次のようになります。
の*サポート*で*使用され続け*ます*
次のようになります。
をサポートするために引き続き使用されます。
他の場所では、'%' は '-' と '!' を置き換えます。太字のテキストの間でスペースを置き換えます。
この問題は、1 つの PDF を処理し、他の PDF を処理しない場合にのみ発生します。pdfinfo によると、両方の PDF は Quartz PDFContext によって生成されます。
Linux コマンド pdftotext は同じ結果をレンダリングします。
これは元の PDF の生成方法に問題がありますか? なぜこうなった?