从提取的图像中恢复 pdf

从提取的图像中恢复 pdf

这是单页图像的信息pdf文件:

$ pdfimages -list p1.pdf 
page   num  type   width height color comp bpc  enc interp  object ID
---------------------------------------------------------------------
   1     0 image     900  1100  rgb     3   8  image  yes        4  0
   1     1 mask      900  1100  -       1   1  image  no         4  0    

我使用以下方法从 pdf 中提取图像pdfimages

$ pdfimages -p p1.pdf ./p1
$ ls
p1-001-000.ppm  p1-001-001.pbm   p1.pdf 

输出 p1-001-000.ppmp1-001-001.pbm分别对应于前面所示的“图像”和“掩模”。

然后我尝试使用convertpdftk以两种不同的方式(“图章”和“背景”)从“图像”和“蒙版”恢复原始pdf:

$ for i in *.{ppm,pbm}; do convert $i $i.pdf; done
$ ls
p1-001-000.ppm  p1-001-000.ppm.pdf  p1-001-001.pbm  p1-001-001.pbm.pdf  p1.pdf
$ pdftk p1-001-000.ppm.pdf stamp p1-001-001.pbm.pdf output p1stamp.pdf
$ pdftk p1-001-000.ppm.pdf background p1-001-001.pbm.pdf output p1bkg.pdf
  1. p1stamp.pdf是空白的(与原始的非常不同p1.pdf),虽然p1bkg.pdf和原始p1.pdf看起来相似,但在右边框和下边框周围仍然不同。

    pdfimages开头显示的输出有一个名为“type”的列

    类型

    图像类型。可能的值有:image(不透明图像)、mask(单色图像掩模)、smask(软掩模图像)和stencil(用于绘制颜色或图案的单色掩模图像)。

    注意:PDF 中图像的透明度是通过使用两个单独的 PDF 对象创建的:一个用于图像,另一个用于蒙版或 smask。属于透明图像的 mask/smask 始终直接跟随列表中的图像。

    “mask”、“smask”和“stencil”在pdf文件中用作前景还是背景?

    它们与“水印”有何不同? “水印”总是用作背景吗?

  2. 另一个问题是,两个新的 pdf 文件p1stamp.pdf均为 476 KB,比原始文件 (仅 94 KB)p1bkg.pdf大得多。p1.pdf即使我通过以下命令压缩新的 pdf 文件,它们的大小也不会改变:

    $ pdftk p1bkg.pdf output p1bkgcomp.pdf compress
    

我们怎样才能真正做到与 分割工作相反的工作 pdfimages,即从 提取的图像中恢复原始 pdf 文件pdfimages。以便外观和大小与原始pdf文件相同或接近?

谢谢。

答案1

由于第二张图像是一个蒙版,因此需要像蒙版一样应用 - 可以这样做:

convert ./p1-001-000.ppm  ./p1-001-001.pbm -alpha Off -compose CopyOpacity -composite output.pdf

来源

这导致一个PDF文件它的底部黑色边缘被遮罩删除/隐藏,但文件大小要大得多(485.3Kb vs 96Kb)并且具有更大的 PDF 页面。:

每个文件的文件属性截图

请记住,PDF 不仅仅是分层的图像 - 它们还包含文本、格式等。因此,仅从 pdf 文件中提取图像会丢失信息。在这种情况下,在 LibreOffice Draw 中查看原始 PDF 文件时,图像的边缘超出了 PDF 页面的边缘,因此未显示(我认为每个图像中的图像也缩放为不同的尺寸... - 从 LibreOffice Draw 中提取为 PNG 的图像这里用于比较)

相关内容