首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何利用安卓上的iText从PDF文件中提取图像和文本

如何利用安卓上的iText从PDF文件中提取图像和文本
EN

Stack Overflow用户
提问于 2012-11-25 01:11:13
回答 1查看 4.8K关注 0票数 6

我已经完成了从PDF中提取文本,但现在我想提取图像。第一个问题是图像在每页文本之间。我想知道的是如何按顺序提取图像,即使文件是每页2列,以及如何确定图像放在文本中的位置。

这是一些我试过的密码。

图像提取:

代码语言:javascript
运行
复制
ExtractImages.java:
public static final String RESULT = "results/part4/chapter15/Img%s.%s";
public void extractImages(String filename)
    throws IOException, DocumentException {
    PdfReader reader = new PdfReader(filename);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    MyImageRenderListener listener = new MyImageRenderListener(RESULT);
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        parser.processContent(i, listener);
    }
}

MyImageRenderListener:
public MyImageRenderListener(String path) {
    this.path = path;
}

public void renderImage(ImageRenderInfo renderInfo) {
    try {
        String filename;
        FileOutputStream os;
        PdfImageObject image = renderInfo.getImage();
        if (image == null) return;
        filename = String.format(path, renderInfo.getRef().getNumber(), image.getFileType());
        os = new FileOutputStream(filename);
        os.write(image.getImageAsBytes());
        os.flush();
        os.close();
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

代码处理pdf的内容并检查图像,然后将这些图像呈现到图像文件(.png、.jpg等)中。

我在这里遇到的问题是,它没有按顺序提取图像。我想要图像的顺序,所以我将知道什么图像在第一页和最后一页。我该怎么做?那么,在不将图像呈现为文件的情况下,可以提取图像吗?我使用该图像的目标是在我的android应用程序中显示它为image,而不将其放入文件中。如果我不可能,那么我将坚持删除图像,当用户完成使用它。

我的目的是从一个pdf文件中提取(而不是查看)文本和图像,并在一个安卓应用程序中按顺序显示它。

EN

回答 1

Stack Overflow用户

发布于 2017-07-27 14:58:53

高级别办法:

  1. 从文档中提取所有文本,而不关心阅读顺序。
  2. 根据字符、比格和曲线图的分布来确定文本的语言
  3. 一旦知道了语言,您就知道是使用LTR (从左到右)还是RTL阅读顺序。
  4. 使用诸如每个字符的边框、语言和字体等信息,启发式地构建文本行(一个很好的初始度量可能是“连接两个字符,如果它们位于相同的y-位置,并且x-位置之间的间隔在平均+ std_dev范围内)。”
  5. 一旦构建了行,构建段落(类似于前面的启发式)
  6. 既然有了段落和文本的语言,就可以按正确的顺序打印段落。

这是我在iText上一直在研究的事情,它肯定不是一项琐碎的任务。

最简单的解决方案当然是有一个标记的pdf文档。带标记的文档包含有关哪些可视元素以何种方式组合在一起的信息。或者,简单地说,你不必担心建立线条和段落,这已经做好了,而且已经标记好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13547359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档