在我的一个应用程序中,他们正在从 SVG 创建 PDF。为了构建 PDF,他们将缓冲区构建为 PDF 内部结构树(标题、正文、外部参照表、预告片等)。在 SVG 中,我有 tspan 元素,它具有带有图像图案 URl 的填充属性。 我正在使用下面的 PDF 内部结构来用图像填充文本,但我得到的是空白 PDF 页面。该图像是 jpeg 图像。请帮我解决这个问题。
15 0 obj
<< /Type /Pattern
/PatternType 1
/PaintType 1
/TilingType 1
/BBox [0 0 60 60]
/XStep 60
/YStep 60
/Resources 16 0 R
/Length 12
>>
stream
q
/img1 Do
endstream
Q
BT
/F1 1 Tf
1 0 0 -1 0 0 Tm
0 0 0 1 K
15.0 W
0 J
0 0 0 1 k
BX /ca0 gs EX
(HELLO) Tj
/Pattern cs
/P1 scn
0 0 TD
(HELLO) Tj
ET
首先,已经在评论中讨论过,您在图案内容流中绘制位图图像
/img1 Do
之前没有设置当前变换矩阵来缩放它。因此,您的图像将绘制在 1×1 用户空间单位正方形中(默认为 1/72 in × 1/72 in)。这肯定不是你想要的。
您已经在评论中更正了这一点
我使用 BBox 作为 0,0 610 458,xstep 作为 610,ystep 作为 458,cm 作为 610 0 0 458 0 0,但静态图像不可见。
寻找更多问题,因此,人们在您共享的文件中发现:
BX /ca0 gs EX
查找 ca0 资源,可以看到这将非描边操作的 alpha 常量设置为 0。因此,任何后续填充操作都将不可见!当您想看到填充文本的图像时,这是完全错误的。使用 1 而不是 0。如果您确实想降低不透明度,请从 1 开始,然后减小值,直到效果令您满意为止。进行这些更改后,您的 PDF 将显示
(顺便说一句,Chrome 中的集成 PDF 查看器已经对前两项更改感到满意......)