我需要从PDF中获取用于渲染的CMYK值。
我认为它们是C1键下的值范围0 - 1.0。
有谁知道如何获得它们?
答案 0 :(得分:2)
CMYK值与' C1'无关。键。 可能是一个定义为/ C1的颜色空间,但它不包含CMYK值。
任何对象都可以在各种颜色空间(灰色,RGB,CMYK,sRGB,分离,DeviceN,NChannel,ICC和一些特殊空间)中定义,对于那些不是设备空间的空间(即不是灰色, RGB或CMYK)颜色首先转换为设备空间之一。然后在PDF参考中定义了关于如何在它们之间转换设备空间的规则。
对象的实际颜色分量将在对象的内容流中定义(对于页面或表单上下文中的矢量对象)或二进制数据(对于图像),或者从函数(着色字典)计算
为了找到这些中的任何一个,您需要阅读PDF文件,根据需要解压缩流,找到您想要信息的对象,然后确定当前的颜色空间。然后,您可以将颜色组件从定义对象的任何颜色空间转换为CMYK。
也许如果你解释了你的实际目标,那么可能会更有帮助。
[UPDATE]
您可以通过设置ColorConversionStrategy = Gray来使用Ghostscript创建新的灰度PDF。
这样做的好处是可以处理PDF的所有元素,而不仅仅是图像。
您是否意识到PDF文件通常不仅仅包含光栅图像?可以将文本,线条,阴影和透明度组定义为在给定颜色空间中操作。这不是一项简单的任务。
如果您实际上只处理图像,则ColorSpace在图像字典中定义(可能是间接参考)。您将不得不解析PDF文件(可能将其解压缩)以查找颜色空间定义。然后由图像数据给出每个分量的样本值。这些范围为0-65535(取决于BPC,图像字典中的1,2,4,8或16),您必须应用Decode数组将值映射到适合颜色空间的范围。 / p>
如果您想转换为灰度,则必须将转换应用于灰色。复杂空间将包括映射到设备空间的方法,并且PDF参考手册中介绍了设备空间之间的转换。对于ICCBased空间,您将需要一个ICC色彩管理引擎,您可能想要考虑LCMS,或者您可以自己编写。