如何在PDF中转储嵌入的ICC配置文件信息?(命令行或图形用户界面工具)

7
2个回答

9
这是一种基于命令行的方法,用于从PDF中提取ICC颜色配置文件。它使用了安全研究员Didier Stevens编写的Python脚本pdf-parser.py,您可以在此处下载该脚本。
然而,这个工具不是一个专门用于ICC提取的工具。(我不知道有这样的工具。)它是一个通用的命令行工具,用于调查PDF文件。
因此,您需要通过各种步骤来实现提取。
第1步:确定ICC配置文件的PDF对象ID
您必须使用-s来搜索字符串ICCBased。(没有嵌入ICC配置文件的PDF文件将没有这个关键字[可能除了在文本内容中使用它...])
pdf-parser -s ICCBased my.pdf

我的测试PDF返回了这个:

obj 18 0
 Type: 
 Referencing: 21 0 R

似乎在PDF对象21中可以找到ICC配置文件。

步骤2:查看第1步中找到的PDF对象

您需要使用-o 21来查看PDF对象21:

pdf-parser.py -o 21 my.pdf

我的测试 PDF 返回了这个:

obj 21 0
 Type: 
 Referencing: 
 Contains stream

  <<
    /Alternate /DeviceRGB
    /Filter /FlateDecode
    /Length 2574
    /N 3
  >>

好的,看起来我们已经接近了...

步骤3:转储包含配置文件的PDF对象中的流

在第2步中,我们获得了两个重要的信息:

  • PDF对象21包含一个流(使用pdf-parser.py-o 21参数不显示其内容)。
  • 必须使用/FlateDecode解压缩对象流才能获取其内容。

因此,现在我们需要使用两个附加参数运行pdf-parser.py

  • -d filename,以便将PDF对象21的流转储到文件中。
  • -f,以便在将对象流转储到文件时过滤/解压缩它。
  • 运行命令:pdf-parser.py -o 21 -f -d 21.stream my.pdf

步骤4:验证提取的内容

我们现在已经将PDF对象21的流导出到名为21.stream的文件中。让我们看看它包含了什么内容:
file 21.stream
 21.stream: Microsoft ICM Color Profile

看起来我们成功了。 :-)

步骤5:打开颜色配置文件

我会检查我的Mac OSX系统是否接受此配置文件:

mv 21.stream 21.icm
open 21.icm

OSX使用'Color Sync Utility'打开文件并显示窗口。单击列表条目会在窗口底部打开不同的信息面板:

Mac OSX  'Color Sync Utility' showing various infos about the extracted ICM profile.

步骤六:使用Argyll的iccdump将ICC文件的内容转储为文本

请注意,Graeme Gill的ArgyllCMS是一款开源的颜色管理软件,适用于Linux、Mac OSX和Windows平台,并提供多个命令行工具。其中之一是iccdump。我们可以使用它来查看新赢得的21.icm文件的属性:

iccdump 21.icm
ICC: Header: size = 3144 字节 CMM = 'Lino' Version = 2.1.0 Device Class = 显示器 Color Space = RGB Conn. Space = XYZ Date, Time = 1998年2月9日,6:49:00 Platform = 微软 Flags = 非嵌入式配置文件,可在任何位置使用 Dev. Mnfctr. = 'IEC ' Dev. Model = 'sRGB' Dev. Attrbts = 反射型,有光泽 Rndrng Intnt = 感知意图 Illuminant = 0.964203,1.000000,0.824905 [Lab 100.000000,0.000498,-0.000436] Creator = 'HP '
tag 0: sig 'cprt' type 'text' offset 336 size 51 文本: No. chars = 43 0x0000: 版权所有 (c) 1998 Hewlett-Packard 公司
tag 1: sig 'desc' type 'desc' offset 388 size 108 文本描述: ASCII 数据,长度为 18 个字符: 0x0000: sRGB IEC61966-2.1 无 Unicode 数据 ScriptCode 数据,代码 0x0,长度为 18 个字符 0x0000: 73 52 47 42 20 49 45 43 36 31 39 36 36 2d 32 2e 31 00
tag 2: sig 'wtpt' type 'XYZ ' offset 496 size 20 XYZ 数组: No. elements = 1
tag 3: sig 'bkpt' type 'XYZ ' offset 516 size 20 XYZ 数组: No. elements = 1
tag 4: sig 'rXYZ' type 'XYZ ' offset 536 size 20 XYZ 数组: No. elements = 1
tag 5: sig 'gXYZ' type 'XYZ ' offset 556 size 20 XYZ 数组: No. elements = 1
tag 6: sig 'bXYZ' type 'XYZ ' offset 576 size 20 XYZ 数组: No. elements = 1
tag 7: sig 'dmnd' type 'desc' offset 596 size 112 文本描述: ASCII 数据,长度为 22 个字符: 0x0000: IEC http://www.iec.ch 无 Unicode 数据 ScriptCode 数据,代码 0x0,长度为 22 个字符 0x0000: 49 45 43 20 68 74 74 70 3a 2f 2f 77 77 77 2e 69 65 63 2e 63 68 00
tag 8: sig 'dmdd' type 'desc' offset 708 size 136 文本描述: ASCII 数据,长度为 46 个字符: 0x0000: IEC 61966-2.1 Default RGB colour space - sRGB 无 Unicode 数据 ScriptCode 数据,代码 0x0,长度为 46 个字符 0x0000: 49 45 43 20 36 31 39 36 36 2d 32 2e 31 20 44 65 66 61 75 6c 74 20 ...
tag 9: sig 'vued' type 'desc' offset 844 size 134 文本描述: ASCII 数据,长度为 44 个字符: 0x0000: Reference Viewing Condition in IEC61966-2.1 无 Unicode 数据 ScriptCode 数据,代码 0x0,长度为 44
注意: ArgyllCMS 包含一个命令行工具 extracticc,它可以从 TIFF 文件中提取嵌入的 ICC 配置文件。但是它没有从 PDF 文件中提取配置文件的工具。

1
在PDF文件中,ICC配置文件通常存储/应用于图像附件或存储在PDF文件的PDF/X输出意图区域。类似callas pdfToolbox(警告:我与该公司有关系!)和Enfocus Pitstop等工具可以展示PDF文件中的所有颜色信息,无论是通过GUI还是使用命令行接口(在pdfToolbox的情况下)。

如果我不必考虑成本的话,那些都是不错的选择。(更便宜的Enfocus Pitstop售价为799美元) - kaorukobo
pdfToolbox桌面版实际上比那个更便宜。无论在你的情况下这个成本是否合理,都是你需要弄清楚的。你的问题根本没有提到成本... - David van Driessche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接