Я получаю пробел между буквами (например, между буквами) при извлечении pdf с использованием pdfbox. Похоже, это произошло из-за шрифта Couriernew, поскольку извлечение прекрасно работает с другими шрифтами. Приложение работает на AWS lambda. Я также вижу ошибку «Не удалось записать в кэш шрифтов java.io.FileNotFoundException: /home/user/.pdfbox.cache» в журналах только для этого конкретного файла PDF.
Я попытался установить для шрифтов PDDocument по умолчанию значение arial.
PDFont font = PDTrueTypeFont.loadTTF(_PDdoc, new File("C:\\Windows\\FONTS\\arial.ttf"));
for (int i = 0; i < _PDdoc.getNumberOfPages(); ++i) {
PDPage page1 = _PDdoc.getPage(i);
PDResources res = page1.getResources();
for (COSName fontName : res.getFontNames()) {
res.put(fontName, font);
}
}
Но это не работает, как ожидалось. На локальной машине нет проблем с кешем. Любые выводы будут оценены.
Попробовал реализовать решение, предоставленное в Apache PDFBox Удалить пробелы между символами .
String extractNoSpaces(PDDocument document,String regionName,PDPage page) throws IOException
{
PDFTextStripperByArea pts = new PDFTextStripperByArea() {
@Override
protected void processTextPosition(TextPosition text)
{
int[] character = text.getCharacterCodes();
//check for space
}
};
pts = _PDFTextStripperByAreaMap.get(regionName);
pts.setSortByPosition(true);
pts.extractRegions(page);
return pts.getTextForRegion(regionName);
}
В документах содержится не так много информации для getCharacterCodes (), и вышеописанный метод также не выполняется.