Pdf覆盖不工作



我一直在寻找解决这个问题的方法:我有两个带图像的面向景观的A3 pdf,我想以一种方式覆盖它们,即生成的pdf包含两个图像合并为一个,好像其中一个是水印,但具有相同的密度。把它想象成在一张A3纸上打印两个不同的pdf文件,我想要得到完全相同的效果。

换句话说——我想用一种方式来表达它——我想叠加两个pdf文件,在上层,让所有的"白色"区域透明。

基本上,我只是按照这个问题的任何解决方案的步骤:

将一个PDF或ps文件叠加在另一个文件上

pdftk在我的情况下不起作用。生成的PDF显示了位于顶层的PDF,但看不到底层。于是,我着手编程解决方案,下载了pyPdf。

该站点的代码完全实现了所需的解决方案:

 from pyPdf import PdfFileReader,PdfFileWriter
 output = PdfFileWriter()
 input1 = PdfFileReader(file("b.pdf", "rb"))
 page1 = input1.getPage(0)
 watermark = PdfFileReader(file("a.pdf", "rb"))
 page1.mergePage(watermark.getPage(0))
 output.addPage(page1)
 outputStream = file("c.pdf", "wb")
 output.write(outputStream)
 outputStream.close()

但是,结果与使用pdftk后相同。

我做错了什么?也许这不是pdf合并,多合并,冲压,叠加等,但其他的东西?如果有,它叫什么?

pdf中的白色可能是两种基本情况的结果:要么是在那里没有画任何东西,要么是在那里画了一些东西,使用了有效的白色。第一种类型的pdf文件可以使用这些页面合并方法添加背景,而后者的pdf文件则不能。

示例文件a.pdf页面的内容流是这样开始的:

1 0 0 -1 0 841 cm
0.45 0 0 0.45 0 0 cm
1 0 0 1 0 0 cm
0 0 m 2646 0 l 2646 1870 l 0 1870 l h
q
1 1 1 rg f
Q

前三行改变操作的坐标系统,使其原点位于左上角,坐标值从右到下递增,单位为1/160英寸。

第四行绘制了一个覆盖整个页面的矩形(实际上甚至更多),第六行用白色填充该矩形。(第五行和第七行只是保存和恢复图形状态。)

通过将这个PDF叠加在另一个页面上,因此,这个PDF首先用一个白色矩形覆盖该页的所有现有内容。

因此,您的PDF不能通过简单地将页面内容添加到PDF背景页面的内容中来给定背景。你必须

  • 首先从该内容中删除第4行和第6行(也许在lucidchart中有一些复选框允许您打开或关闭此白色背景矩形)
  • 或者使用不同的水印程序(比如反过来做,使用透明度将PDF页面与水印PDF页面叠加)。

PS:严格地说,这些内容行已经是错误的:一旦你开始构建一个路径(在上面的示例中发生在0 0 m中,即移动到位置0,0 ),你可以只使用路径构建(或路径剪切)操作,直到你最终使用路径绘制操作符(f,即填充,在你的示例中)。参考答案

因此,这里不允许颜色设置1 1 1 rg(即设置填充颜色为RGB 100%, 100%, 100%)和特殊的图形状态操作q (保存图形状态)操作。因此,根据PDF查看器的不同,在显示页面时可能会发生不同的事情,例如,填充操作可能被完全忽略,或者仅仅是颜色设置操作,而使用当前的填充颜色(黑色?)。我们不能指望所有的PDF阅读器都能像adobereader那样处理这个错误。

也许lucidchart已经解决了这个问题,更新就足够了。否则,你应该让lucidchart开始制作正确的PDF图表。

最新更新