1

当我将一个 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 中删除该色彩空间?

4

1 回答 1

2

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

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

  2. 将pdf作为二进制文件读入coldfusion<cffile action="readbinary" file="#inputPath#" variable="input">

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

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

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

  6. 将输出文件写入文件系统<cffile action="write" file="#outputPath#" output="#output#" nameconflict="overwrite">

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

  1. 使用合并命令重新保存 pdf<cfpdf action="merge" source="#outputPath#" destination="outputPath2" pages="1" overwrite="yes">
于 2014-05-08T00:13:06.240 回答