美文网首页
终章:word到pdf

终章:word到pdf

作者: igool | 来源:发表于2020-04-09 15:40 被阅读0次

    阅读此文请先查看昨天的更新任重到远,从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要复杂,还有些小细节需要再处理一下。

    相关文章

      网友评论

          本文标题:终章:word到pdf

          本文链接:https://www.haomeiwen.com/subject/lwlcmhtx.html