无法从pdf中提取cmyk颜色空间

无法从pdf中提取cmyk颜色空间,pdf,pdfbox,color-space,pdfclown,Pdf,Pdfbox,Color Space,Pdfclown,我正在尝试从pdf中提取颜色空间数据。我有一个Pantone和CMYK colorspaces的文件。当我使用任何PDF库(我使用pdfclown、pdfbox和icePdf)从PDF中提取颜色空间时,输出数据只包含Pantone颜色空间数据,甚至不包含关于CMYK颜色空间的单个信息。我在CorelDraw软件中检查了该文件,当我单击颜色空间时,它显示了准确的颜色空间值,如(PANTONE 3735 C,C 0 M 50 Y 50 K 0 e.t.C)。如何提取pdf(Pantone/CMYK)

我正在尝试从pdf中提取颜色空间数据。我有一个Pantone和CMYK colorspaces的文件。当我使用任何PDF库(我使用pdfclown、pdfbox和icePdf)从PDF中提取颜色空间时,输出数据只包含Pantone颜色空间数据,甚至不包含关于CMYK颜色空间的单个信息。我在CorelDraw软件中检查了该文件,当我单击颜色空间时,它显示了准确的颜色空间值,如(PANTONE 3735 C,C 0 M 50 Y 50 K 0 e.t.C)。如何提取pdf(Pantone/CMYK)中的所有颜色空间

使用(var file=new org.pdfclown.files.file(filePath))
{
org.pdfclown.documents.Document=file.Document;
foreach(org.pdfclown.documents.Page在document.Page中)
{
ContentScanner cs=new ContentScanner(page);//将页面内容包装到扫描仪中。
System.Collections.Generic.List List=cs.Contents.ContentContext.Resources.colorspace.Values.ToList();
for(int i=0;i
样品具有CMYK和PANTONE颜色

从“pdfclown”显示PANTONE及其可选配色空间:

原始答案 很遗憾,您没有显示代码。但是您的屏幕截图看起来像是只查看页面参考资料的颜色空间部分。这在许多方面还不够:

  • 首先,从内容流中按名称引用颜色空间资源(参见屏幕截图上的Contents条目),以选择用于笔划或填充的颜色空间。但有些预定义名称不需要在参考资料中描述,请参阅CS运算符的文档:

    设置用于笔划操作的当前颜色空间。操作数名称应为名称对象。如果颜色空间可以通过名称指定,并且没有其他参数(DeviceGrayDeviceGBDeviceCMYK,以及图案的某些情况),则可以直接指定名称。否则,它应该是在当前资源字典的颜色空间子字典中定义的名称

    (ISO 32000-1,表74-颜色运算符)

    因此,要检查是否使用了DeviceGrayDeviceRGBDeviceCMYK,必须使用这些名称扫描内容流中的颜色空间选择操作(CSCS

    此外,甚至还有一些快捷颜色选择操作,可以设置这些颜色空间中的任何一个并立即选择其中的颜色(ggrgrgk),您还必须扫描内容流

    例如,在您的页面内容流中,您可以找到:

    0.3 0 1 0 k
    

    以及这些运算符的多个其他实例。因此,至少DeviceGrayDeviceCMYK正在使用中(除了您找到的资源之外)

  • 此外,并非所有在颜色空间资源字典中找到的颜色空间都必须在内容中实际使用。因此,在如上所述扫描内容以使用未声明的名称空间时,还必须扫描已声明的名称空间以确保它们实际被使用

  • 您还必须查看内容流中使用的其他资源:

    • 位图图像(具有子类型图像的XObject),例如Im1具有色彩空间设备cmykIm5具有色彩空间设备GB

      同样,您必须确保位图在内容流中实际使用

      注意,JPEG2000位图可能会以自己的格式提供自己的颜色空间定义

    • 着色,PDF中的所有着色都有颜色空间设备cmyk。再次确保它们被实际使用

    • 表单XObject和模式有自己的内容流和资源。别忘了深入研究它们的结构。但在你的情况下,没有

    • 类型3字体字形是通过内容流和资源定义的,它们也可能有自己的颜色空间。您的文件中未使用任何内容

    • 透明度组还可以具有颜色空间设置,除其他外,指定组作为一个整体的颜色空间,然后将其作为对象绘制到其背景上

也许我忘了在其他1或20个地方寻找相关的色彩空间设置

但是,对于您的文件,上面提到的位置已经表明,除了颜色空间资源外,设备灰色设备GB设备Myk也用于您的PDF中

关于评论 由于您同时提供了代码,并且此代码使用PDF小丑,所以我也将在这里使用它。你可以用PDF框做同样的事情

扫描内容流 A如何扫描ContentStream(检查了'Contents'的BaseDataObject,它是这样的“[0]{cm[1,0,0,1,0,0]},{gs[GS11]}”

使用PDF小丑,您通常使用
ContentScanner
扫描内容流。在您的代码中,您已经有了
ContentScanner cs
。因此,只需在循环中调用
ScanForColorspaceUsage(cs)
,即可定义如下:

void ScanForColorspaceUsage(ContentScanner cs)
{
while(cs.next)
0.3 0 1 0 k
0.9 g