终章:word到pdf

阅读此文请先查看昨天的更新任重到远,从word到pdf的路

昨天还遗留了一个问题,就是word这中的选中框转换到pdf之后,不能正常显示。这是原始的WORD


word反始图

转换之后的pdf如图


未修复的PDF

经过调研之后,发现昨天说的通过PDFBOX定位到0052的字符串,将其替换成选中的框,基本的方向是对的。

第一步:定位每个0052的0的位置


第二步:用画笔工具清除掉0052


第三步:用画笔工具画一个带边框的正方形,及打勾的形状


具体代码主要是用到了PDFTextStripper,PDPageContentStream两个类。

PDFTextStripper:它是一个专门拆解PDF中文本的解释器,能将每个汉字,符号或者数字,字母一一分开,并能打标相应的属性,这里面有字符的X,Y坐标,字体大小,字的高度,宽度等。你只需要继承这个类,实现writeString的方法


PDPageContentStream:顾名思义,它是一个处理PDF内容的对象,传入当前的PAGE对象之后,以追加模式执行上面的第一,二,三


截图中相关数字说明:

23:表示第四个字符5结束时相对于第一个字符0的向右偏移量

8:表示白色填充框,黑色边框的高度

10:表示新的黑色框绘制起点相对于第一个字符0的向右偏移量

12:表示打勾的起点相对于新的黑色框绘制起点的向右偏移量

4:表示打勾的起点垂直方向上在黑色框的向上偏移量

14:表示打勾转折的点相对于新的黑色框绘制起点的向右偏移量

2:表示打勾的起点垂直方向上在黑色框的的向上偏移量

18:表示打勾结束点水平方向相对于第一个字符0的向右偏移量

最后贴一个处理好的


华丽的分割线是我


 最近在做新的业务文档生成时,如果文档里面的字体存在多个子集时,你不做任何处理,docx4j转pdf直接报

For TrueType collection you must specify which font to select (-ttcname)

打个比方,比如你比较幸运的用到了宋体simsun.ttc,这个字体比较特殊,它会有simsun,nsimsun等字体,当不指定某一个子集,PDF转换就会失败。由于docx4j转 pdf是基于FOP:

Apache™ FOP (Formatting Objects Processor) is a print formatter driven by XSL formatting objects (XSL-FO) and an output independent formatter. It is a Java application that reads a formatting object (FO) tree and renders the resulting pages to a specified output. Output formats currently supported include PDF, PS, PCL, AFP, XML (area tree representation), Print, AWT and PNG, and to a lesser extent, RTF and TXT. The primary output target is PDF.

在它的官网的源代码里面,我找到了可以生成子集文件的方法:



在参考了它的配置文件说明之后config

我自己的XML文件如图


宋体终于可以正常显示了,由于WORD的格式比PDF要复杂,还有些小细节需要再处理一下。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文:冬瓜妈妈 一 暑假过得真快,一眨眼又要开学了。暑假我们一家三口好好得玩了半个月,回来之后就带亮亮去上暑期班了。...
    梦猫人读书阅读 1,955评论 55 44
  • 前年的圣诞节前后,我和小伙伴们以演出的形式,在大悦城帮一个男生求婚。 大悦城人来人往,川流不息,圣诞气息浓厚。场景...
    林四月阅读 380评论 0 1
  • 3.18日,晴。 睡了一觉起来,先放首(无限大)。边洗漱边听歌,心里默默的给自己加油打气。一切都会更好的,没有什么...
    夏Lan阅读 143评论 0 0
  • 年纪一到六十岁,就不是活着了,是一场漫长的告别,是自吹唢呐冗长的追悼会,悼念这一生的雪尘露雨,风烟花水,之所以还想...
    无良雨落_阅读 184评论 0 0