【问题标题】:CFPDF add watermark any level of transparency is coming out opaqueCFPDF添加水印任何级别的透明度都是不透明的
【发布时间】:2014-05-02 23:16:22
【问题描述】:

当我将一个 pdf 水印到另一个 pdf 上时,水印 PDF 中的任何半透明部分都会变得完全不透明。对此我能做些什么吗?或者这是 CFPDF 的限制吗?

服务器是 CF9,带有最新的修补程序。

有趣的是,当 chrome 渲染最终产品时,透明度会保留,但当 Acrobat Pro 渲染它时,它是不透明的。我可以将最终产品打印到 Adob​​ePDF,而且它是准确透明的,但我无法通过我们的打印店发送一致的页面大小,这是一个大问题。

每个请求添加的代码:

<cfpdf  action="addwatermark" 
    source="#BackgroundPDF#" 
    copyfrom="#ForegroundPDF#" 
    destination="#DestinationPDF#" 
    foreground="yes" 
    opacity="10" 
    overwrite="yes" 
    position="#XYPositioning#" 
    rotation="#RotationIfRequired#" 
    showonprint="yes"
  >

我在进行过程中发现的其他细节:如果我使用 Acrobat pro,我可以进行打印制作、输出预览并将“显示”选项更改为“非 DeviceCMYK”,然后我就可以恢复透明度了,但这只是某种预览,我该如何从 PDF 中删除该色彩空间?

【问题讨论】:

  • 您可以发布您正在使用的代码吗?听起来这可能是一个错误。
  • @MattBusche - 这只是基本的添加水印 PDF 操作。这绝对是一个错误,但问题是 Acrobat 在哪里?还是CF?有解决方法吗?

标签: pdf coldfusion coldfusion-9 acrobat cfpdf


【解决方案1】:

感谢@mkl Here 提供的帮助,我们能够弄清楚如何修改 pdf 二进制文件。所以我只需要能够在 CF 中这样做。由于将文件作为文本文件读取会由于字符编码而导致问题,因此我能够做到这一点。

  1. 在二进制文件中标识要更改的文本。这就是@mkl 帮助我。问题文本是“/K true”,它告诉 PDF 使用淘汰组,我确信这对 PDF 专家有意义 但对我来说完全是希腊语。

  2. 将 pdf 作为二进制文件读入 Coldfusion &lt;cffile action="readbinary" file="#inputPath#" variable="input"&gt;

  3. 将二进制字节数组编码为十六进制&lt;cfset temp=BinaryEncode(input,"Hex")&gt;

  4. 删除我想删除的现在是十六进制的字符串&lt;cfset temp2 = ReplaceNoCase(temp,"2F4B2074727565","","All")&gt;&lt;!--- 2F4B2074727565 is HEX for /K true ---&gt;

  5. 将十六进制解码回字节数组&lt;cfset output = BinaryDecode(temp2,"Hex")&gt;

  6. 将输出文件写入文件系统&lt;cffile action="write" file="#outputPath#" output="#output#" nameconflict="overwrite"&gt;

现在您有了一个看起来像预期的 PDF。问题是它有问题。如果我打开它,什么都不做,然后关闭它,系统会提示我保存。如果我保存它,我不再有问题。我认为 CFPDF 合并操作基本上可以做到这一点,而不需要用户做任何事情,所以我添加了最后一步。

  1. 使用合并命令&lt;cfpdf action="merge" source="#outputPath#" destination="outputPath2" pages="1" overwrite="yes"&gt;重新保存pdf

【讨论】:

  • 删除我想删除的现在是十六进制的字符串 - 不要删除,而是用空格替换,即“20202020202020”。那么你最终不需要修复交叉引用条目。
  • @mkl - 你能进一步解释你的意思吗?我会在这里盲目地听从你的指示,但我想了解我为什么要这样做。
  • 你可以使用ReplaceNoCase(temp,"2F4B2074727565","","All"),但我建议你使用ReplaceNoCase(temp,"2F4B2074727565","20202020202020","All")。这样所有偏移量都保持正确。
  • @mkl - 我知道该怎么做,但是“所有偏移量都保持正确”是什么意思。如果不这样做可能会出现什么问题?
  • 如果不这样做可能会出现什么问题? - 您所见证的问题,迫使您使用合并命令重新保存 pdf 的问题。 PDF 文件包含一个交叉引用结构,指示在文件中的哪个字节偏移处可以找到某些信息。如果删除字节,则这些交叉引用不正确。如果您用相同数量的空格替换数据,这些交叉引用仍然正确。
猜你喜欢
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 2021-07-15
  • 2017-01-11
  • 2014-03-18
  • 2016-01-03
  • 2017-01-28
  • 2014-02-12
相关资源
最近更新 更多