Тика не идеальна.У него будут проблемы со многими файлами PDF (если многое не изменилось за последний год).Убедитесь, что вы используете обновленную версию Tika.Когда я использовал Tika, это было в версии 0.8 (9 месяцев назад).В этой версии была ошибка, из-за которой анализ PDF был особенно проблематичным.Я обошел проблему, используя PDFBox, который обертывает Apache Tika.В конце этого поста есть часть моего кода, обертывающего PDFBox, на случай, если вы решите попробовать этот маршрут.
Если ничего другого, непосредственное использование PDFBox даст вам больше контроля над параметрами.Одним из таких параметров является обработка "бисерного" текста.Например, газета с колоннами украшена бисером, а буква - нет.PDFBox может пытаться поддерживать поток письма, но он не всегда делает большую работу.Если вы не извлекаете текст из PDF-файлов без бисера, возможно, вы захотите отключить эту функцию.
Возможно, вы также захотите попробовать программу pdftotext .Еще раз, убедитесь, что у вас последняя версия.Со всеми конвертерами PDF в текст производительность быстро меняется с версией!
import org.apache.pdfbox.util.PDFTextStripper;
PDFTextStripper stripper = new PDFTextStripper;
public static String pdfbox(InputStream is, Writer writer) throws IOException, ConversionException {
Boolean force = true;
PDDocument document = null;
try {
document = PDDocument.load(is, force); // force extraction
stripper.setForceParsing(force); // continue when errors are encountered.
stripper.setSortByPosition(false); // text may not be in visual order.
stripper.setShouldSeparateByBeads(true); // beads are columns, attempt to handle them.
stripper.writeText(document, writer);
}
finally {
try {
if (document != null) {
document.close();
}
}
catch (Exception e) {
throw new ConversionException(e);
}
}
}