如何理解PDF表单标志?咨询PDFBox读取的复选框流指令含义
Hey,我来帮你拆解这段PDF内容流里的指令——这其实是PDF的内容操作符,用来描述页面上的图形和文字绘制逻辑,你遇到的这段正好是绘制一个带数字'4'的复选框的完整流程:
1 g 0 0 18 18 re f 0.5 0.5 17 17 re s q 1 1 16 16 re W n 0 g BT /ZaDb 14.532 Tf 2.853 4.081 Td 13.9943 TL (4) Tj ET Q
逐行拆解PDF内容操作符
这些都是PDF官方规范里的标准内容流操作符,我给你逐个对应解释:
1 g:设置非描边颜色为白色(PDF里颜色值0代表黑色,1代表白色;g是non-stroking color的缩写,用来控制图形填充的颜色)0 0 18 18 re:定义一个矩形路径,参数格式为x y width height,也就是从坐标(0,0)开始,绘制一个宽18、高18的正方形f:用当前设置的非描边颜色填充这个矩形(这里就是白色,先给复选框画了个白色底色)0.5 0.5 17 17 re:再定义一个稍小的矩形,从(0.5,0.5)开始,宽高都是17,比外层正方形小一圈s:用当前描边颜色(默认是黑色)描这个矩形的边框——这就画出了复选框的黑色外框q:保存当前的图形状态(包括坐标系统、颜色、裁剪区域等,相当于把当前状态压入栈中)1 1 16 16 re:定义一个更小的矩形,从(1,1)开始,宽高16W:将这个矩形设置为裁剪路径——接下来绘制的内容只会显示在这个矩形范围内,防止文字超出复选框n:取消当前路径的填充或描边操作,只是完成裁剪区域的设置0 g:把非描边颜色改回黑色,准备绘制黑色的数字BT:开始文本块(Begin Text的缩写,接下来的指令都是文字绘制相关的)/ZaDb 14.532 Tf:设置当前使用的字体为ZaDb(这是PDF内部的字体名称,大概率是某种无衬线字体),字号为14.5322.853 4.081 Td:移动文本绘制的光标到指定坐标(x=2.853, y=4.081),用来调整数字"4"在复选框里的位置,让它居中显示13.9943 TL:设置文本行间距(Text Leading)为13.9943,这里因为只有单个字符,实际影响不大(4) Tj:绘制括号内的文本内容"4"(Tj是Show Text的操作符,用来输出文本)ET:结束文本块(End Text的缩写,标志文字绘制指令完成)Q:恢复之前保存的图形状态(对应前面的q操作,把栈里的状态弹出,回到绘制复选框之前的状态)
简单总结一下:这段指令的逻辑是先画白色填充的正方形,再描黑边框,设置裁剪区域防止文字溢出,最后在框内绘制数字"4",完成一个带编号的复选框的绘制。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

