在PDF中以分色打印单色图像

在PDF中以分色打印单色图像,pdf,printing,color-space,monochrome,Pdf,Printing,Color Space,Monochrome,我在尝试在pdf中插入图像时遇到了一些问题,同时更改了其颜色空间。 现在我有一个png单色图像(8位,1位深度),其中1是黑色,0是透明的(类似于遮罩)。 我想将此图像插入pdf文件,并将颜色空间更改为“分离”,因为它需要使用专色打印。 有什么办法吗 目前我尝试了以下方法: <</Type /XObject /Subtype /Image /Width 800 /Height 600 /ColorSpace <</CS0 6 0 R>> /BitsPerCom

我在尝试在pdf中插入图像时遇到了一些问题,同时更改了其颜色空间。 现在我有一个png单色图像(8位,1位深度),其中1是黑色,0是透明的(类似于遮罩)。 我想将此图像插入pdf文件,并将颜色空间更改为“分离”,因为它需要使用专色打印。 有什么办法吗

目前我尝试了以下方法:

<</Type /XObject
/Subtype /Image
/Width 800
/Height 600
/ColorSpace <</CS0 6 0 R>>
/BitsPerComponent 1
/Filter /FlateDecode
/DecodeParms <</Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 800>>

你已经很接近了。您错过了将告诉它将零视为透明的图像属性,并且您使分离颜色空间的备用空间比需要的更复杂。我本以为你写的东西(如果编码正确的话)会以青色和白色显示图形,并覆盖任何底层材料

向图像添加掩码属性,表示0和0之间的所有值都将被屏蔽。这将使零位透明

我不会使用白色作为分离颜色名称,因为它可能会导致混淆,除非您确实将1位绘制为白色,而将0位保留为未绘制。这将是不寻常的,但我可以看到它的发生。除非您想要绘制的颜色不能用灰度表示,否则我将使用非常简单的设备灰色替代颜色。你说图像是黑色和透明的,所以使用DeviceGray将是一个不错的选择

从分离颜色(0为未绘制,1为黑色)转换到备用颜色空间(DeviceGray)非常简单,只需将输入值1反转,该值变为DeviceGray 0,输入值0变为DeviceGray 1。因此,postscript函数是最快编写的。{1 sub}就是它所需要的一切

<</Type /XObject
/Subtype /Image
/Width 800
/Height 600
/ColorSpace <<6 0 R>>
/BitsPerComponent 1
/Mask [0 0]
/Filter /FlateDecode
/DecodeParms <</Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 800>>
stream
………
endstream
endobj

6 0 obj
[/Separation /White /DeviceGray 7 0 R]
endobj

7 0 0bj
<< 
/FunctionType 4
/Range [0 1]
/Domain [0 1]
/length 7
>> 
Stream
{1 sub}
endstream
endobj

以什么方式“不起作用”?您的颜色空间定义确实不完整,您没有关闭“着色变换”函数的字典或关闭颜色空间数组,也没有说明对象10是什么(我假设为CMYK)。我已经删除了PostScript标签,因为它似乎没有任何意义。嗨,谢谢你的回答!事实上,您对我们的意图是100%正确的:)因为需要,我们需要将其显示为青色,但将1位打印为白色。我们正在深入研究PDF规范,现在我们正在使用以下代码进行测试打印:我们正在尝试做一些类似于您的方法的事情,因为您的解决方案看起来更干净。再次感谢您抽出时间!
<</Type /XObject
/Subtype /Image
/Width 800
/Height 600
/ColorSpace <<6 0 R>>
/BitsPerComponent 1
/Mask [0 0]
/Filter /FlateDecode
/DecodeParms <</Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 800>>
stream
………
endstream
endobj

6 0 obj
[/Separation /White /DeviceGray 7 0 R]
endobj

7 0 0bj
<< 
/FunctionType 4
/Range [0 1]
/Domain [0 1]
/length 7
>> 
Stream
{1 sub}
endstream
endobj