首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GSON / iText:从PDF1.7 byte[]中提取文本

GSON / iText:从PDF1.7 byte[]中提取文本
EN

Stack Overflow用户
提问于 2020-09-24 22:30:33
回答 1查看 95关注 0票数 0

我正在使用Rest自动化测试-Assured和GSON -并且需要验证在POST请求的响应中返回的PDF文件的内容。文件的内容各不相同,可以包含任何内容,从文本到文本和表格,或者文本和表格和图形。每个页面都可以,而且很可能是不同的字形内容。我只关心pdf页面上的所有文本--无论是纯文本,还是表格中的文本,或者与图像相关(或在图像中)的文本。由于请求返回的所有pdf都是不同的,因此我无法定义搜索区域(据我所知)。我只需要提取页面上的所有文本。

我将pdf数据提取到一个字节数组中,如下所示:

代码语言:javascript
运行
复制
        Gson pdfGson = new Gson();
        byte[] pdfBytes =
            pdfGson.fromJson(this.response.as(JsonObject.class)
                    .get("pdfData").getAsJsonObject().get("data").getAsJsonArray(), byte[].class);

(我已经尝试过byte[]的其他提取方法,但这是我发现的唯一返回有效数据的方法。)这将返回一个非常大的byte[],如下所示:

代码语言:javascript
运行
复制
[37, 91, 22, 45, 23, ...]

当我解析数组时,我遇到了与This Question相同的问题(除了我的pdf是1.7),我尝试实现可接受的答案,根据我的目的进行调整,并按照iText文档中的解释进行调整:

代码语言:javascript
运行
复制
    byte[] decodedPdfBytes = PdfReader.decodeBytes(pdfBytes, new PdfDictionary(), FilterHandlers.getDefaultFilterHandlers());

    IRandomAccessSource source = new RandomAccessSourceFactory().createSource(decodedPdfBytes);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ReaderProperties readerProperties = new ReaderProperties();
    
    // Ineffective:
    readerProperties.setPassword(user.password.getBytes());
    PdfReader pdfReader = new PdfReader(source, readerProperties);
    // Ineffective:
    pdfReader.setUnethicalReading(true);

    PdfDocument pdfDoc = new PdfDocument(pdfReader, new PdfWriter(baos));

    for(int i = 1; i < pdfDoc.getNumberOfPages(); i++) {
        String text = PdfTextExtractor.getTextFromPage(pdfDoc.getPage(i));
        System.out.println(text);
    }

这确实解码了pdf页面,并返回文本,但它只是标题文本。不返回任何其他文本。

值得注意的是,在前端,当用户单击按钮生成pdf时,它会返回一个包含下载数据的blob,所以我相对确定元数据是GSA编码的,但我不确定这是否重要。由于敏感材料的原因,我无法分享pdf文档的示例。

在正确的方向上的任何一点都将非常感谢!我花了3天的时间试图找到一个解决方案。

EN

回答 1

Stack Overflow用户

发布于 2020-12-10 21:15:51

对于那些寻找解决方案的人-最终我们走了一条不同的路线。我们从来没有找到解决这个特定问题的方法。

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

https://stackoverflow.com/questions/64048654

复制
相关文章

相似问题

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