java打印pdf文件乱码_java – 从PDF复制粘贴在原始文件上是乱码,但在使用CutePDF打印pdf时已修复...

我有this PDF file,这是希腊文.尝试从中复制和粘贴文本时出现known problem,导致轻微的乱码.我说轻微而不是全部的原因是,虽然粘贴的输出在希腊语中没有意义,但它由有效的希腊字符组成.此外,该问题的一个有趣方面是并非所有字符都映射错误.例如,如果您比较此原始文本条带

ΕΞ. ΕΠΕΙΓΟΝ – ΑΜΕΣΗ ΕΦΑΡΜΟΓΗ

ΝΑ ΣΤΑΛΕΙ ΚΑΙ ΜΕ Ε-ΜΑIL

使用PDF中粘贴的内容:

ΔΞ. ΔΠΔΙΓΟΝ – ΑΜΔ΢Η ΔΦΑΡΜΟΓΗ

ΝΑ ΢ΣΑΛΔΙ ΚΑΙ ΜΔ Δ-ΜΑIL

您会注意到某些字符被正确粘贴,而其他字符则没有.值得一提的是,错误的字符被反射映射错误,例如Ε变为Δ,反之亦然.

当我使用例如打开PDF时Adobe,并使用PDF编写器打印,在本例中为CutePDF,复制和粘贴时的输出是正确的!

鉴于上述情况,我的问题如下:

>这种行为的根本原因是什么?

>我如何将解决方案集成到基于java的工作流程中,以便随机导入PDF文件?

编辑:一些错别字

解决方法:

一些基本背景:

通过从字体中选择字形来显示PDF格式的文本.字形是一个或多个字符的直观表示.字形选择使用字符代码完成.对于文本提取,您需要知道哪些字符与字符代码相对应.

在这种情况下,这是使用ToUnicode CMap实现的.

在本文档中,文本片段的第一个字母E显示如下:

[0x01FC,…] TJ

ToUnicode CMap包含此条目:

4 beginbfrange

<01f9> <01fc> <0391>

...

endbfrange

这意味着字符代码0x01F9,0x01FA,0x01FB和0x01FC分别映射到Unicode U 0x391,U 0x392,U 0x393和U 0x394.

U+0394是希腊三角洲Δ,在复制/粘贴时显示.

下一个字母使用字符代码0x0204绘制.相关的ToUnicode条目是< 0200> &LT 020B&GT < 039a>,将其正确映射到U+039E

所以,你得到了轻微的胡言乱语,因为只有一些Unicode映射是错误的.有时这是故意的,例如防止数据挖掘.我之前在财务报告中看过它.

标签:java,pdf

来源: https://codeday.me/bug/20190702/1357736.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值