给定PDF,如何从命令行中提取图像*及其在页面上的位置*?

时间:2011-01-03 00:17:16

标签: linux pdf command-line

我有一张包含文字和图片的PDF。我想使用linux命令行从PDF中提取图像。我可以使用pdfimages来提取图像,但我还想在每个页面上找到该图像所在的位置。 pdfimages可以告诉我每个图像(来自文件名)的页面,但这就是它给我的全部内容。有没有其他FLOSS工具可以做到这一点?

3 个答案:

答案 0 :(得分:15)

我认为PDF必须包含放置它们的信息,所以这应该是可能的。另一方面,解决方案可以是例如:

  1. 将每个pdf页面转换为pdftoppm
  2. 的图像
  3. 使用pdfimages
  4. 从每个页面中提取图像
  5. 使用cvCvtColor
  6. 将图像转换为单个8位灰度通道(以便更快地进行分析)
  7. 使用matchTemplate
  8. 进行对象检测

    步骤1可能类似于第2步:

    for i in {0..99} ; do pdfimages -f $((i)) -l $((i+1)) file.pdf page$((i)); done
    

    这里的步骤3 *一个简单的例子

    在第4步中,您不应该遇到培训问题,因为图像将完全匹配。 matchTemplate( imageToSearch, pdfPageImg, outputMap, 'CV_TM_SQDIFF')

    (* - 链接已删除,因为它现在似乎指向勒索软件网站)

答案 1 :(得分:7)

-xml命令的pdftohtml开关将提供图像位置,尺寸和来源信息。

pdftohtml -xml file.pdf

答案 2 :(得分:6)

PDF无法保证如果重复使用图像,则不会是单独的图像。除了页面位置及页面上的实际大小之外,PDF文件中的图像元数据非常少。我写了一篇文章,解释了如何在http://www.jpedal.org/PDFblog/2010/09/understanding-the-pdf-file-format-images/

的PDF中存储图像