【问题标题】:How to use a color Mask on a bitonal image in a PDF file?如何在 PDF 文件中的双色调图像上使用颜色遮罩?
【发布时间】:2022-01-27 05:56:52
【问题描述】:

我正在尝试创建一个包含单色 1 位图像的 PDF 文件,但将图像配置为透明,其中包含白色像素(以便图像下方的内容可见)。图片使用DeviceGray色彩空间,BitsPerComponent为1。

我正在使用Mask 条目和一个指定应该被屏蔽的颜色范围的数组。我的 PDF 规范副本将此称为“彩色键掩码”。由于图像是双色调的,所以这个颜色范围只是[1 1](白色)。

但是,我根本无法让它工作。图片下的内容从不显示。我尝试过调整范围值、更改图像过滤器、调整周围的图形状态 - 均无济于事。

唯一有效的方法是将图像色彩空间从 DeviceGray 更改为 DeviceRGB 并相应调整 Mask 范围,但这会增加 PDF 文件中这些图像的大小,我做不到。

在双色调DeviceGray 图像上使用色键掩码的正确方法是什么?

这是我认为应该有效但无效的图像:

6 0 obj
<<
/Length 8800
/Type /XObject
/Subtype /Image
/Filter /ASCIIHexDecode
/BitsPerComponent 1
/Width 350
/Height 100
/ColorSpace /DeviceGray
/Mask [1 1]
>>
stream
FFFF<snip>FFFC
endstream
endobj

编辑:为完整的上下文添加完整的示例 PDF 文件。该文件包含带有文本“XYZ”的图像,以及在 XYZ 图像下方运行的线,该线被图像隐藏但在文本下应该可见:

%PDF-1.4
%צה
1 0 obj
<<
/Type /Catalog
/Version /1.4
/Pages 2 0 R
>>
endobj
2 0 obj
<<
/Type /Pages
/Kids [3 0 R]
/Count 1
>>
endobj
3 0 obj
<<
/Type /Page
/MediaBox [0.0 0.0 612.0 792.0]
/Parent 2 0 R
/Contents 4 0 R
/Resources 5 0 R
>>
endobj
4 0 obj
<<
/Length 53
>>
stream
0 396 m
612 396 l
S
q
90 0 0 80 261 356 cm
/Im1 Do
Q

endstream
endobj
5 0 obj
<<
/XObject <<
/Im1 6 0 R
>>
>>
endobj
6 0 obj
<<
/Length 1920
/Type /XObject
/Subtype /Image
/Filter /ASCIIHexDecode
/BitsPerComponent 1
/Width 90
/Height 80
/ColorSpace /DeviceGray
/Mask [1 1]
>>
stream
FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FE0FFF8307FFF8380000FFC0FF07FF0783FFF0780000FFC0FF87FE0FC3FFF0F80000FFC0FF83FE0FC1FFE0F80000FFC0FFC1FC1FE0FFC1FFFFE0FFC0FFE0F83FF0FFC3FFFFC1FFC0FFF0F87FF07F83FFFF83FFC0FFF0707FF83F07FFFF07FFC0FFF820FFFC3F0FFFFF07FFC0FFFC21FFFC1E0FFFFE0FFFC0FFFC01FFFE1C1FFFFC1FFFC0FFFE03FFFF0C3FFFF83FFFC0FFFF07FFFF003FFFF07FFFC0FFFF07FFFF807FFFF07FFFC0FFFE03FFFFC0FFFFE0FFFFC0FFFC01FFFFC0FFFFC1FFFFC0FFFC21FFFFE1FFFF83FFFFC0FFF820FFFFE1FFFF83FFFFC0FFF0707FFFE1FFFF07FFFFC0FFF0F87FFFE1FFFE0FFFFFC0FFE0F83FFFE1FFFC1FFFFFC0FFC1FC1FFFE1FFFC1FFFFFC0FFC3FE1FFFE1FFF83FFFFFC0FF83FE0FFFE1FFF07FFFFFC0FF07FF07FFE1FFE0FFFFFFC0FE0FFF83FFE1FFE000007FC0FE1FFFC3FFE1FFE000007FC0FC1FFFC1FFE1FFE000007FC0F83FFFE0FFE1FFE000007FC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0
endstream
endobj
xref
0 7
0000000000 65535 f
0000000015 00000 n
0000000078 00000 n
0000000135 00000 n
0000000247 00000 n
0000000352 00000 n
0000000399 00000 n
trailer
<<
/Root 1 0 R
/ID [<DF10D2517650DA8AC34FF5D6B9B046EA> <DF10D2517650DA8AC34FF5D6B9B046EA>]
/Size 7
>>
startxref
2505
%%EOF

编辑 2:感谢iPDFdev's confirmation 这确实可行,我深入研究了读者方面。原来是SumatraPDF有bug,我用的旧版Acrobat Reader也有bug。

更新 Acrobat Reader 后,简化的示例正在运行,但涉及表单的更复杂的示例仍然无法运行 - 似乎这可能是 PDF 规范中未被广泛使用或经过实战考验的领域其他,甚至在 Acrobat Reader 中。由于兼容性问题,我可能会暂时远离DeviceGray + bitonal + Mask 组合,并改用效率较低的SMask 选项。

所有示例(简单的和复杂的)都在 iOS、Chrome 和 Firefox 查看器中正常工作,所以我只是碰巧选择了两个最差的阅读器选项来测试它。

【问题讨论】:

  • Adobe Reader 或 PDFBox 或两者或其他查看器中的渲染是否错误?
  • 它在 Adob​​e Reader 或 SumatraPDF 中没有按预期呈现——所以我的工作假设是它是创建方面的问题,而不是渲染方面的问题(即我做错了什么)。
  • This 是 Adob​​e Reader 向我展示的内容。该行not在文本下看起来hidden...(读者还想保存一个修复后的副本。难怪,所有交叉引用偏移都是错误的...)
  • Acrobat 和 Xodo 显示图像下方的线条,SumatraPF 不显示。可能是 SumatraPDF 中的一个错误
  • PDFBox 正确显示文件。

标签: pdf pdf-generation pdfbox


【解决方案1】:

没有看到整个文件,我无法说出为什么不应用掩码。

但下面的文件显示 /Mask 应用于 /DeviceGray 双色调图像:

4 0 obj
<<
  /Type /Page
  /Resources <</XObject <</XO0 6 0 R>>>>
  /Contents [5 0 R ]
  /MediaBox [0  0  612  792  ]
  /Parent 3 0 R
>>
endobj
5 0 obj
<<
  /Length 103 
>>
stream
  /DeviceRGB cs
  0 1 0 sc
  50 650 m 250 650 l 250 750 l 50 750 l h f
  q 200 0 0 100 50 650 cm /XO0 Do Q
endstream
endobj
6 0 obj
<<
  /Subtype /Image
  /Width 16 
  /Height 8 
  /BitsPerComponent 1 
  /ColorSpace /DeviceGray
  /Mask [1  1]
  /Length 16 
>>
stream
UUUUUUUUUUUUUUUU
endstream
endobj

这是结果(图像绘制在绿色矩形的顶部,U=01010101,白色 (1) 是透明的):

【讨论】:

  • 感谢您的信息,很高兴知道从概念上这应该可以工作。我已经用完整的示例文件更新了问题,以防其他上下文有帮助。
【解决方案2】:

对于 SumatraPDF,该错误位于 MuPDF 引擎中,由于上述问题,该错误已在当前预发布版本中得到修复。

SumatraPDF Pre-Release Build 3.4 版。14261+ 2022-Feb-04 或更高版本可从https://www.sumatrapdfreader.org/prerelease

获得

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 2014-02-01
    • 2022-11-01
    • 1970-01-01
    • 2013-07-23
    • 2023-04-10
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多