我需要从包含技术绘图的公司PDF文件中提取图片。这些PDF文件符合PDF/A格式。
我正在使用Apache的pdfbox方法,该方法是从此问题中学到的。
我的问题是,对于某些文件,提取出的图像被水平分成了最多3个片段。由于我不想手动拼接它们,如果有人能提供一些建议,我会很高兴。
编辑-方法1:
我想到的一个解决方案是为每个图像创建文件夹,然后将所有片段放入相应的文件夹中,在文件夹上进行迭代并合并内容。这需要我做一些分类工作,但我认为它可以解决问题。
/**
*
* @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
由于时间不够,我和我的同事不得不手动提取图像。我仍然感兴趣,但我必须在空闲时间解决这个问题。