java - 提取嵌入在 pdf 中的图像的名称

标签 java itext pdfbox

我有一个包含多张图像的 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 示例。

关于java - 提取嵌入在 pdf 中的图像的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11341201/

相关文章:

Java - 当行不一致时将文本文件导入数组

java - 405 此 url 不支持 http 方法 get

c# - 使用 ITextSharp 生成 XPS 文档而不是 PDF?

java - 使用 itext 或 pdfbox 的 PdfAnnotation 标记的 QuadBounds Order

android - PDFBOX 在 Android 中的使用

java - 使用 PDFBox 嵌入字体以扁平化 PDF 表单

java - maven-shade-plugin 中的 list 不起作用

java - 在 java 中将字符串转换为日期时出现意外输出

c# - 使用 IText 或 ITextSharp 或 BouncyCaSTLe 从 pdf 文件中提取 pkcs7 (byte[])

java - 如何为复选框添加边框并使其始终可见