从PDF中提取的图像水平分块

6
我需要从包含技术绘图的公司PDF文件中提取图片。这些PDF文件符合PDF/A格式。 我正在使用Apache的pdfbox方法,该方法是从此问题中学到的。
/**
 * 
 * @param filename pdf file
 * @param res folder, where images are extracted
 * @throws IOException
 * @throws DocumentException
 */
public class ExtractImages {

    public static void extractImages(String filename, String res)
            throws IOException, DocumentException {
        int pageNo = 0;

        PDDocument document = null;
        document = PDDocument.load(filename);
        List<PDPage> pages = document.getDocumentCatalog().getAllPages();
        Iterator<PDPage> iter = pages.iterator();

        while (iter.hasNext()) {
            pageNo++;
            PDPage page = iter.next();
            PDResources resources = page.getResources();
            Map<String, PDXObjectImage> pageImages = resources.getImages();
            if (pageImages != null) {
                Iterator<String> imageIter = pageImages.keySet().iterator();
                while (imageIter.hasNext()) {
                    String key = (String) imageIter.next();
                    PDXObjectImage image = (PDXObjectImage) pageImages.get(key);
                    image.write2file(res + "_page_" + pageNo + "_" +     key);  
                }
            }
        }
        if (document != null)
            document.close();
    }
}

我的问题是,对于某些文件,提取出的图像被水平分成了最多3个片段。由于我不想手动拼接它们,如果有人能提供一些建议,我会很高兴。
编辑-方法1:
我想到的一个解决方案是为每个图像创建文件夹,然后将所有片段放入相应的文件夹中,在文件夹上进行迭代并合并内容。这需要我做一些分类工作,但我认为它可以解决问题。
String key = (String) imageIter.next();

返回Im<number>,number表示每页图像的顺序。因此,文件夹中的片段已经按顺序排列,合并程序可以轻松确定哪个部分在顶部等。

编辑-方法2

我能想到的另一种方法:片段在其文件名中具有其顺序,模式为pdfname_page_[\d]_Im[\d][\.][tiff|png]。因此,我可以根据该顺序对图像进行排序,然后将所有具有相同宽度的行中的所有片段合并。 我检查了这些片段,似乎几乎所有图像都具有不同的尺寸。

你对这些方法有什么看法?

EDIT3

由于时间不够,我和我的同事不得不手动提取图像。我仍然感兴趣,但我必须在空闲时间解决这个问题。


我应该将自己的解决方案建议添加为答案/评论吗?还是将它们添加到问题中可以? - mike
1个回答

2
提取出的图像被分成了3个片段,因为嵌入的图像也是如此。这很可能是PDF生成软件自动完成的。(很少有人会故意这样做,比如InDesign文档设计师)。
因此,没有可靠的方法可以自动拼接这些碎片。
你可以尝试以下方法——但只有在你有Adobe Acrobat(Pro?)版本时才能使用:
- 使用内置的“PDF优化器”。 - 在“删除对象”面板中,激活“检测图像碎片并合并它们”的选项。
(抱歉,上述菜单和UI条目是我从德语Acrobat Pro安装的记忆中翻译的,所以它们肯定不完全匹配英语UI。)
然而,在我个人的经验中,这种方法并不是非常可靠。在大多数PDF中图像碎片的情况下,它根本不起作用。 :-(

1
顺便提一下,我曾经在Windows中将图像打印到PDF时遇到过这个问题。由于某种未知的原因,Windows内部的打印架构在将图像发送到打印机驱动程序时会将一些图像分成几个部分。 - yms
你的方法是自动适用于每个PDF文档、每一页甚至每个图像吗? - mike
@mike:Acrobat(Pro?)中的“检测图像片段并合并它们”仅适用于每个PDF文档(正如我所说,并不可靠)。 - Kurt Pfeifle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接