使用PDF内部结构在PDF文本中填充图像

问题描述 投票:0回答:1

在我的一个应用程序中,他们正在从 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
pdf svg pdf-generation
1个回答
0
投票

首先,已经在评论中讨论过,您在图案内容流中绘制位图图像

/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,但静态图像不可见。

寻找更多问题,因此,人们在您共享的文件中发现:

  1. 在文本对象中,您可以使用以下命令设置图形状态参数
    BX /ca0 gs EX
    
    查找 ca0 资源,可以看到这将非描边操作的 alpha 常量设置为 0。因此,任何后续填充操作都将不可见!当您想看到填充文本的图像时,这是完全错误的。使用 1 而不是 0。如果您确实想降低不透明度,请从 1 开始,然后减小值,直到效果令您满意为止。
  2. cm 操作添加到 Pattern 定义中时,您似乎不小心删除了图像绘制操作。于是,再次添加图像绘制操作。
  3. 您对页面和模式使用相同的 Resources 字典。显然 Adobe Acrobat 不喜欢这样。因此,为该模式创建一个专用的 Resources 字典,然后从页面资源字典中引用 XObject 字典。

进行这些更改后,您的 PDF 将显示

(顺便说一句,Chrome 中的集成 PDF 查看器已经对前两项更改感到满意......)

© www.soinside.com 2019 - 2024. All rights reserved.