我有一个包含多张图片的 pdf 文档。
我想检索这些图像的名称。
如何使用 iText 或 pdfbox 来实现这一点?
我知道 ExtractImages 从 PDF 中提取图像。我觉得这将在某个地方具有获取图像名称的功能。但是,我不知道 ExtractImages 的用法。
获取 PDF 名称的实际问题是使用它来压缩这些图像以减小 pdf 的大小。我的方法正确吗?
使用 pdfbox 可以得到的是图像的键和它的后缀(类型)。您也可以保存该图像。
String prefix = new File(pdfFilename).getName();
prefix = prefix.substring(0, prefix.indexOf(".pdf"));
PDDocument document = null;
try
{
document = PDDocument.loadNonSeq(new(pdfFilename), null); // use non-seq parser is better
List<PDPage> pages = document.getDocumentCatalog().getAllPages();
System.out.println(pdfFilename + ": Total pages: " + pages.size());
int p = 0;
for (PDPage page : pages)
{
++p;
PDResources resources = page.getResources();
Map<String, PDXObjectImage> imageResources = resources.getImages();
for (String key : imageResources.keySet())
{
PDXObjectImage objectImage = imageResources.get(key);
System.out.printf("image key '%s': %d x %d, type %s%n", key, objectImage.getHeight(), objectImage.getWidth(), objectImage.getSuffix());
// write that image
String fname = String.format("%s-%04d-%s", prefix, p, key);
objectImage.write2file(fname);
}
}
}
// put catch here
document.close();
但是,除非您确定所有这些图像都直接转换为 PDF,即没有旋转、平移或缩放,否则这对您没有帮助。如果您需要这个,那么您可能想查看 PDFBOX src 下载中的 PrintImageLocations.java 示例。