您不能只替换字符串中的文本.我不轻易说.我多年前曾在Acrobat上工作,并在初始版本中使用了文本搜索工具,因此我对文本编码问题有了相当深刻的理解.主要问题是PDF中的每个字符串都以某种方式编码.这是因为PDF是在Unicode通常可用之前制作的,并且在PostScript中有历史记录. PosctScript喜欢为字体提供非常灵活的编码方法,并鼓励重新编码.

让我们退后一步,了解整体情况.

PDF格式的字符串中的字符默认情况下用文本运算符显示,编码为一系列8位字符.要确定为每个字节绘制的字形,将通过该字体的编码向量推送该字节.编码向量将字节映射到字形名称,然后在字体中查找并在页面上绘制.请注意,此描述是半真半假的(稍后).

大多数生成PDF的应用都很友好,只使用标准编码,如StandardEncoding或WinAnsiEncoding,其中大部分都非常合理.其他人将使用标准编码以及编码增量,这是从标准编码到编码的差异.

有些应用程序试图在它们生成的PDF中更加节俭,因此它们会查看它们使用的字形并决定嵌入字体的子集.如果他们只使用大写和小写罗马字母和数字,他们重建没有这些元素的字体,也可以选择重新索引它们并提供一个编码矢量,使字节0x00转到字形’a’,0x01转到字形’b’等.

现在回到半真半假.有一类字符由字符ID(或CID)编码,TrueType和OpenType字体属于该类别.在这种情况下,您可以访问Unicode,但是还有一个编码步骤,您现在将字符串(现在为UTF16BE)映射到CID,该CID用于从字体获取字形.并且由于没有特别好的理由,Adobe使用PostScript函数进行映射.再次,这是一个3/4的事实真相,因为对于中文,日文和韩文字体的旧管理有不同的编码.

因此,在您轻松地将字符放入PDF字体的字符串之前,您必须提出几个问题:

>我的字形是字体吗?

>我的字形是否在编码中?

>我的字形的编码是什么?

其中任何一个都可能与您的期望不同.因此,例如,如果你想放入Ä(一个方向),你必须看看字体是否有它的字形(可能不存在,因为字体是一个子集).然后字体可能有一个有趣的编码,可能不包括字形.最后,用于Ä的实际字节值可能不是标准的.

因此,当我看到有人试图简单地替换PDF内容中的一大块文本时,我所看到的只是一个痛苦的世界.对于大多数理智的PDF,这将是有效的,90%的时间,但对于任何异国情调 – 祝你好运. PDF的文本渲染怪癖很痛苦,有时更容易将其视为只写格式.

java pdf 修改内容_Java PDFBox – 读取和修改带有特殊字符的pdf(变音符号)相关推荐

  1. java pdf替换内容_Java添加、提取、替换和删除PDF图片

    (一)简介 PDF在大多操作平台都能以高质量被使用,非常适合将有用的信息存档和分享.接下来这篇文章将介绍通过Java添加.提取.删除和替换PDF文档中的图片.文章大概结构如下: 添加图片到PDF 提取 ...

  2. java用poi实现对word读取和修改操作

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  3. java对文本文件进行操作:读取、修改、添加、删除、重命名等

    java对文本文件进行操作:读取.修改.添加.删除.重命名等 Java IO 也称为IO流,IO = 流,它的核心就是对文件的操作,对于 字节 .字符类型的输入和输出流. IO是指对数据流的输入和输出 ...

  4. java 读文件 二进制_JAVA中读取文件(二进制,字符)内容的几种方法总结

    JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用 public cla ...

  5. java 打印异常内容_java自定义异常打印内容详解

    本文实例为大家分享了java自定义异常打印内容的具体代码,供大家参考,具体内容如下 背景:在开发中,我们可能会使用到自定义异常,但是,这个自定义异常在打印日志时,往往打印的内容比较多. 1.自定义异常 ...

  6. [office办公软件学习] wps表格如何批量修改内容?wps表格批量修改内容的方法

    本篇文章由 泉州SEO www.234yp.com 整理发布,office办公软件学习 www.234yp.com/Article/155228.html 谢谢合作! office办公软件学习 前不久 ...

  7. java 静态资源变量_Java中读取配置文件中的内容,并将其赋值给静态变量的方法...

    项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方式Obje ...

  8. java pdf替换内容_java PDF批量替换关键词

    java PDF批量替换关键词 要求:将要替换的字段封装到一个类中,并规定字段名与PDF中关键字的映射. 准备: 关键词信息类-----MatchItem package pdf.replace; i ...

  9. java属性修改前后_java 记录对象前后修改的内容(工具类)

    有时候业务需要,需记录一条记录的修改历史,但是不能为完成任务而硬编码,不靠谱 这种情况可以使用java反射来完成 对对象属性的描述可以通过自定义注解来完成,读取里面的属性进而记录修改历史. 在对象的属 ...

最新文章

  1. 解决SecureCRT中文乱码
  2. ZooKeeper第三方客户端CuratorFramework简介
  3. 【转】6 个技巧,提升 C++11 的 vector 性能
  4. Angular如何对包含了HTTP请求的服务类进行单元测试
  5. 信管专业c语言考什么,计算机信息管理专业卫生事业单位招聘考试笔试模拟题(十)...
  6. VC嵌入python时debug版lib下载
  7. net java互相调用_Java与.NET的WebServices相互调用
  8. PHP两个二维数组数据处理:字段值相等,则赋值给另一个数组
  9. [转]coolfire黑客入门教程系列之(五)
  10. 禅与维修摩托车的艺术_罗伯特-M-波西格
  11. Python中的二维数组定义
  12. 消防工程师 5.气体灭火系统
  13. 计算机rank函数排名怎么用,用好RANK函数 跨表排名不用愁
  14. Java笔记(错题)
  15. 大学毕业4年-回顾和总结(3)-投资理财观-图穷而真相现
  16. 我们一起写opengl程序
  17. vivo直播应用技术实践与探索
  18. win32面试题总结
  19. 中兴ZTEWCDMA3G模块MF206
  20. 【Linux 应用】 ntp请求时间,以及时间设置方式

热门文章

  1. 资源警告!有人收罗了40个中文NLP词库,放到了GitHub上
  2. 个人认为安卓开发前景
  3. MySQL性能剖析工具(pt-query-digest)
  4. 数字藏品系统开发,APP小程序成品源码搭建开发
  5. 每日词根——sol(完整可靠安慰,太阳严肃)
  6. 关于python程序格式框架以下选项中描述错误的是_关于Python程序格式框架的描述,以下选项中错误的是...
  7. 2020长三角区块链应用创新大赛复赛第三场于能链科技成功举办!
  8. java12安装教程(win10)
  9. 切比雪夫不等式的证明
  10. R语言-查看加载包、卸除加载包及安装包与卸载包