我正在使用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)
的后期。