我正在使用PDFBox 1.8.4将PDF转换为字符串。
例如,我的pdf包含:Pólya,G.和G.Szegő,
输出为:Po´lya,G。和G.Szego˝

有什么办法解决这个问题? (是的,我知道我可以使用replaceAll(“ o'”,“ó”)进行更改)

   PDDocument doc = PDDocument.load(path);
   PDFTextStripper strp = new PDFTextStripper("UTF-8");
   System.out.println(strp.getText(doc));


欢迎所有建议!

编辑1:
PDF_Example

最佳答案

OP提出的文件包含例如这条线



这很可能是他发现的问题的一个样本。

不过,从页面内容流来看,

[(A)32(ttila)-384(G\023)575(obi,)-383
(Zal)8(\023)567(an)-383(Sz)-32(})607(ugyi)-384(and)-383
(T)96(am)8(\023)567(as)-384(Kozsik)]TJ


有人看到例如通过首先绘制´(\ 023),然后返回该字形的宽度(575),然后绘制o,来创建(G\023)575(obi,)中的ó。

因此,您确实将这两个字形´和o打印在同一位置,而不是一个字形ó。

PDFBox PDFTextStripper当前不会合并在相同位置打印的字符,只是将在相同位置绘制两次的相同字形放到大约同一位置。

因此,除了OP提到的replaceAll(“ o'”,“ó”)外,还可以扩展PDFTextStripper以合并某些字形,无论是在其方法processTextPosition的早期还是在writeString(String text, List<TextPosition> textPositions)的后期。

10-08 03:19