我一直在寻找这个问题的解决方案:我有两个面向横向的带有图像的A3 pdf,我希望以这样的方式覆盖它们:生成的pdf包含两个图像合并为一个,就好像其中一个是一个水印,但具有相同的密度。想想它就像在一张A3纸上打印两个不同的pdf一样,我希望得到这种效果。
换句话说 - 只想出一种方法来表达它 - 我想覆盖两个pdf,对于上层,使所有“白色”区域透明。
基本上,我只是按照这个问题的任何解决方案中的步骤:
overlay one pdf or ps file on top of another
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合并,多重融合,冲压,覆盖等等,而是其他什么?如果是这样,它怎么称呼?
答案 0 :(得分:1)
白色可能是两种基本情况的结果:要么是在那里没有被绘制的结果,要么是使用有效的白色在那里绘制的东西。可以使用那些页面合并方法为第一类型的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提供背景信息。你必须
PS:严格来说,这些内容行已经是错误的:只要你开始构建一个路径(上面的示例中就会发生0 0 m
,即移动到位置0,0 ),您可能只使用路径构造(或路径剪切)操作,直到最终在样本中使用路径绘制操作符(f
,即 fill )。参看this answer以供参考。
因此,颜色设置1 1 1 rg
(即将填充颜色设置为RGB 100%,100%,100%)和特殊图形状态操作q
(保存图形状态)此处不允许进行操作。因此,根据PDF查看器,在显示该页面时可能会发生不同的事情,例如,填充操作可能会被完全忽略,或者只是颜色设置操作可能是,并且可能会使用当前的填充颜色(黑色?)。人们不能指望像Adobe Reader那样处理此错误的所有PDF查看器。
也许lucidchart已经解决了这个问题并且更新就足够了。否则你应该让lucidchart开始正确地制作他们的PDF图表。