尝试在 PDF 中进行着色

Posted

技术标签:

【中文标题】尝试在 PDF 中进行着色【英文标题】:Trying to do shading in a PDF 【发布时间】:2022-01-23 14:13:18 【问题描述】:

我正在使用一些 PDF 创建库并对其进行调整以完成更多工作。我目前正在尝试对形状进行着色。在阅读了大量示例后,我似乎无法让它工作。这是目前我创建的一个简单的 PDF,它应该有一个带阴影的正方形,但它是空白的。谁能告诉我为什么?

%PDF-1.3
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Contents 4 0 R>>
endobj
4 0 obj
<</Length 42>>
stream
2 J
0.57 w
10 10 50 50 re
q
W n
/Sh1 sh
Q

endstream
endobj
1 0 obj
<</Type /Pages
/Kids [3 0 R ]
/Count 1
/MediaBox [0 0 595.28 841.89]
>>
endobj
5 0 obj
<<
/FunctionType 2
/Range [0.0 1.0]
/Domain [0.0 1.0]
/C0 [0.1]
/C1 [0.0705882]
/N 1
>>
endobj
6 0 obj
<<
/ShadingType 2
/ColorSpace /DeviceRGB
/Coords [15.000 15.000 45.000 30.000]
/Function 5 0 R
/Domain [0 1] 
/Extend [true true] 
>>
endobj
2 0 obj
<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/Font <<
>>
>>
endobj
/Shading <<
/Sh1 6 0 R
>>
7 0 obj
<<
/Producer (New Affinity xxxxxxxxxxxxxxxxxx [www.newaffinity.com])
/CreationDate (D:20211113101858)
>>
endobj
8 0 obj
<<
/Type /Catalog
/Pages 1 0 R
/OpenAction [3 0 R /FitH null]
/PageLayout /OneColumn
>>
endobj
xref
0 9
0000000000 65535 f 
0000000177 00000 n 
0000000516 00000 n 
0000000009 00000 n 
0000000087 00000 n 
0000000264 00000 n 
0000000367 00000 n 
0000000620 00000 n 
0000000740 00000 n 
trailer
<<
/Size 9
/Root 8 0 R
/Info 7 0 R
>>
startxref
843
%%EOF

【问题讨论】:

虽然这很可能不是问题:在 reW 之间执行 q 是不允许的。因此,绘制结果取决于实现。 从 0.1 到 0.07 也很可能难以察觉。单个值对 DeviceRGB 有意义吗? 感谢这些 cmets - 我已经将 q 移到了前面,并将颜色设置为: /C0 [0 0 0] /C1 [1 1 1] 仍然只是一个空白页:( 我只需要看到一个有效的,这样我就可以从它向后工作 - 但大多数 PDF 压缩了我想看到的位! 谢谢 - 唉 - 这是我用来做这个的例子之一! 【参考方案1】:

PDF 文件不正确,/Shading 资源字典在对象之外。

2 0 obj
<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/Font <<
>>
>>
endobj
/Shading <<
/Sh1 6 0 R  
>>

把它放在对象里面:

2 0 obj
<<
  /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
  /Font <<  >>
  /Shading << /Sh1 6 0 R >>
>>
endobj

将着色颜色空间设置为 /DeviceGray,设置 /C0 [0],设置 /C1 [1](用于演示以增加可见性),然后将显示着色。 如果你想使用 /DeviceRGB,那么 /C0 和 /C1 数组必须有 3 个元素,而 /Range 必须有 6 个元素。

【讨论】:

对,在所有小问题中,我没有看到大问题。哦,好吧... 非常感谢!这一直困扰着我一段时间! :)

以上是关于尝试在 PDF 中进行着色的主要内容,如果未能解决你的问题,请参考以下文章

LWJGL 无法在着色器中采样帧缓冲纹理

如何在片段着色器中进行自定义模板测试

在 R 中使用 geom_rect 进行时间序列着色

一次调用可以在 glsl 计算着色器中进行乒乓传播吗?

从着色器读取数据

R:“着色”根据另一个变量进行绘图