iText PDF坏字符转换
Posted
技术标签:
【中文标题】iText PDF坏字符转换【英文标题】:iText PDF bad character conversion 【发布时间】:2015-05-31 18:14:20 【问题描述】:我有一个 PDF 要阅读,这让我很抓狂。
pdf 表示客户的电费单(意大利语),他希望我从中读取文本。
现在的问题。当我将粘贴文本从 pdf 复制到记事本时,我得到一堆难以理解的字符...
经过大量研究,我找到了答案。 pdf 包含所有字体,但不包含对应于允许导出文本的 cmap。我发现this link 指的是旧版本的 itext(我使用的是 5.5.5 版)。
如果可能的话,我想要实现的是将文本从字形代码转换为 unicode。
我找到了一些对 Cmap-something 的参考,但不知道如何使用它们,而且网上显然没有示例:(
这是我尝试过的
PdfReader reader = new PdfReader("MyFile.pdf");
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
PrintWriter out = new PrintWriter(new FileOutputStream(txt));
TextExtractionStrategy strategy;
strategy = parser.processContent(1, new SimpleTextExtractionStrategy());
String text = strategy.getResultantText();
String cmapFile="UnicodeBigUnmarked";
byte[] text = encodedText.getBytes();
String cid = PdfEncodings.convertToString(text, cmapFile);
Cid 是一个漂亮的日本字符序列
还有:
FontFactory.registerDirectory("myDirectoryWithAllFonts");
就在尝试转换之前。这个解决方案似乎没有结果
我们将不胜感激。
【问题讨论】:
【参考方案1】:您说:当我将粘贴文本从 pdf 复制到记事本时,我得到一堆难以理解的字符。 我假设您正在谈论在 Adobe Reader 中选择文本并尝试将其粘贴到文本中编辑。
如果这不成功,则您的 PDF 不允许您从 PDF 中提取文本,因为文本未正确存储在 PDF 中。观看this video 了解完整说明。
让我们从内部看一下您的 PDF:
我们看到了一个文本对象的开始(它说BT
代表开始文本)。字体/C2_1
定义为字体大小为1。乍一看,这可能看起来很奇怪,但在转换中字体将缩放到大小为6.9989。然后我们看到一些包含双字节字符串的文本数组,例如I R H E Z M W M S R I H I P
。
iText 应该如何解释这些字符?要找出答案,我们需要查看/C2_1
对应的字体使用的编码:
啊哈,存储在内容流中的 Unicode 字符与我们需要的实际字符相对应:IRHE ZMWMSRI HIP
等等。这正是我们使用 iText 将 PDF 转换为文本时所看到的。
但是等一下!当我们使用 Adobe Reader 查看 PDF 时,为什么会看到其他字符?嗯,I
、R
、H
等字符是与字形的“程序”相对应的地址。该程序负责在页面上绘制字符。人们会期望在这种情况下,字符I
将对应于字母I
的字形(或“绘图”,如果您更喜欢这个词)。您的 PDF 中没有这样的运气。
现在,当您使用“带格式复制”时,Adobe 会做什么?目前 iText 中没有实现的大量魔法。为什么不?嗯...我不知道 Adobe 的预算,但它可能比 iText Group 的预算高得多。从包含令人困惑的字体信息的文档中提取文本不在 iText Group 的技术路线图中。
【讨论】:
嗯,您的假设是正确的,但我可以在 adobe XI 中使用“按格式复制”功能,然后成功通过。反正我要看视频 请分享 PDF 以便我们查看。 我可以直接发送给你吗,因为它包含有关我的客户的敏感信息,并且真的不想与整个网络共享它们 没关系,剥离明智的信息总是有效的:/这是链接filedropper.com/bollettaanonima。坦克寻求帮助 您使用的文件共享服务要求我安装 Chrome 插件。我的政策是不这样做。请使用其他文件共享服务。以上是关于iText PDF坏字符转换的主要内容,如果未能解决你的问题,请参考以下文章
iText7 将 HTML 转换为 PDF“System.NullReferenceException”。
使用 iText 将 SVG 转换为 PDF,SVG 未在 PDF 中完全显示
如何使用 iText 将 HTML 转换为 PDF [重复]