当前位置: 首页 > 知识库问答 >
问题:

使用iText从PDF坐标中提取图像

丌官嘉勋
2023-03-14

有可能吗?如果是,那么它可以怎么做。

共有1个答案

汪阳飇
2023-03-14

按照iText示例ExtractImages的思路,您可以像下面这样提取代码:

PdfReader reader = new PdfReader(resourceStream);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
ImageRenderListener listener = new ImageRenderListener("testpdf");

for (int i = 1; i <= reader.getNumberOfPages(); i++) {
    parser.processContent(i, listener);
}

ImageRenderListener的定义如下:

class ImageRenderListener implements RenderListener
{
    final String name;
    int counter = 100000;

    public ImageRenderListener(String name)
    {
        this.name = name;
    }

    public void beginTextBlock() { }
    public void renderText(TextRenderInfo renderInfo) { }
    public void endTextBlock() { }

    public void renderImage(ImageRenderInfo renderInfo)
    {
        try
        {
            PdfImageObject image = renderInfo.getImage();
            if (image == null) return;
            int number = renderInfo.getRef() != null ? renderInfo.getRef().getNumber() : counter++;
            String filename = String.format("%s-%s.%s", name, number, image.getFileType());
            FileOutputStream os = new FileOutputStream(filename);
            os.write(image.getImageAsBytes());
            os.flush();
            os.close();

            PdfDictionary imageDictionary = image.getDictionary();
            PRStream maskStream = (PRStream) imageDictionary.getAsStream(PdfName.SMASK);
            if (maskStream != null)
            {
                PdfImageObject maskImage = new PdfImageObject(maskStream);
                filename = String.format("%s-%s-mask.%s", name, number, maskImage.getFileType());
                os = new FileOutputStream(filename);
                os.write(maskImage.getImageAsBytes());
                os.flush();
                os.close();
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

如您所见,ImageRenderListener方法RenderImage检索参数ImageRenderInfo。这个参数有方法

    null
 类似资料:
  • 问题内容: 首先,我不是Java开发人员:(我只需要一个小程序,它将从现有pdf文件中按字段名称输出到我的字段坐标,当我从命令行调用类时输入该字段的坐标,就像这样: 我在服务器上使用itext。现在,我正在尝试运行简单的代码: 但是我有一个错误:“类型不匹配:无法从列表转换为float []”。当我更换 与 我得到了结果“ [com.itextpdf.text.pdf.AcroFields$Fie

  • 我试图通过翻译在http://viralpatel.net/blogs/itext-tutorial-merge-split-pdf-files-using-itext-jar/找到的splitPDF方法,用clojure从pdf中提取单个页面 IOException流关闭java.io.FileOutputStream.WriteBytes(:-2) 这将阻止我在repl仍然打开时打开文档。一旦

  • 我想从现有的pdf中获取图像字段,并用其他图像填充它,以使用java中的pdfbox库创建新的pdf文件

  • 问题内容: 我需要使用iText从pdf文件中提取文本。 问题是:一些pdf文件包含2列,当我提取文本时,我得到一个文本文件,其中的列作为结果合并(即同一行中两列的文本) 这是代码: 你能帮我完成这个任务吗? 问题答案: 我是iText文本提取子系统的作者。您需要做的是开发自己的文本提取策略(如果您看一下如何实现的话,就会发现您可以提供可插拔的策略)。 您将如何确定列的开始和停止位置完全取决于您-

  • 我试图计算一种有效的方法,将笛卡尔坐标系中的图像转换为极坐标表示。我知道ImToPolar等一些功能正在实现这一点,它工作得很好,但对于大图像来说需要相当长的时间,尤其是当它们需要来回处理时。 这是我的输入图像: 然后我使用以0为中心的笛卡尔网格和函数生成一个极网格。最后,我使用绘制我的图像。 这是我得到的: 这正是我需要的图像,它与ImToPolar相同,或者更好。 既然MATLAB知道如何计算

  • 我的任务是从PDF中提取特定坐标的文本。 我使用Apache Pdfbox客户端进行数据提取。 为了从PDF中获取x、y、高度和宽度坐标,我使用PDF x更改工具,单位为毫米。当我在矩形中传递值时,值不是空值。 请建议我的方法是否正确...