我正在尝试从受保护的PDF中提取图像。
使用普通PDF,Poppler library可以很好地提取图像,而对于受过读保护的PDF,它也可以提取文本。然而,这些图像是一个不同的故事。它要么不提取所有图像,要么以模糊的灰色或黑色提取所有图像。
在下面的PDF(original PDF here)中,您可以在下面的缩略图中看到很多图像:
我尝试了Poppler library:
中的pdfimages
命令
$ pdfimages -j ticket.pdf i
和来自mupdf的pdftohtml
命令:
$ pdftohtml -nodrm ticket.pdf
但是这两个lib只提取了许多图像中的一个。然而,该图像被正确提取。从其他PDF我得到所有图像,但所有图像都是灰色或黑色。
由于读取保护应该只是PDF文档中的标志,而不是源的实际加扰或加密(最终您的计算机可以显示图像而不输入密码),应该可以以某种方式提取单独的图像。我甚至可以使用ImageMagick(convert ticket.pdf ticket.jpg
)从整个PDF创建缩略图,为什么不是单个图像?
有谁知道如何从读保护的PDF中提取所有图像?欢迎所有提示!
答案 0 :(得分:0)
看起来的所有内容都不像图像 IS 图像。
例如,左上角的红蓝黄绿色标志带有黑色+白色"票务服务" text:它是一系列矢量图形(红色,蓝色,黄色和绿色斑块中的每一个都是单独的对象,文本也是如此)。
唯一的"真实" (栅格)图像是以下命令列出的图像:
$ pdfimages -list ticket.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
1 0 image 642 462 index 1 8 image no 38 0 151 151 107K 37%
2 1 image 642 462 index 1 8 image no 38 0 151 151 107K 37%
这些(列出的)图像均由相同的PDF对象表示,其编号/代38 0
(因此 IS 仅嵌入1个图像PDF)。
仅仅因为页面色彩丰富并不意味着嵌入了大量图片!
此外,没有"读保护"在PDF上(无论对您来说意味着什么),并且在该PDF上也没有(用户或所有者)密码和配套加密,如以下命令所示:
$ pdfinfo ticket.pdf
Title: TicketFast
Author: Ticketmaster
Creator: TCT 4.4.4
Producer: PDFlib+PDI 5.0.4 (C++/Linux)
CreationDate: Wed May 5 18:21:29 2010
ModDate: Thu Apr 30 16:02:21 2015
Tagged: no
UserProperties: no
Suspects: no
Form: none
JavaScript: no
Pages: 2
Encrypted: no
Page size: 595.275 x 841.89 pts (A4)
Page rot: 0
File size: 364994 bytes
Optimized: no
PDF version: 1.4
如果在PDF上设置 WAS 密码/加密,则会使用第Encrypted: yes
行进行报告。
" [....]读取保护应该只是PDF文档中的标志[....]"
首先,没有"读保护"。你可能意味着"密码保护"。
其次, IF PDF受密码保护,也是加密的。有两个密码:
然而,当用户密码被留下"空"时,存在(非常常见的)情况。所有PDF阅读器都知道这一点,并且他们尝试空用户"密码"第一。如果它有效,它们将解密并打开PDF。具有空用户密码的PDF仍然可以通过限制复制粘贴,打印,修改等来保护。要更改该状态,您需要知道所有者密码......