首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PDFBox:移除图片后面的文字

PDFBox:移除图片后面的文字
EN

Stack Overflow用户
提问于 2018-09-14 22:31:31
回答 1查看 335关注 0票数 1

我在一个分裂成两个pdf格式的要求,一个与图像和一个与文本。我不想删除图像后面的文本,它应该是图像pdf的一部分。我只想提取PDF中的顶层文本。有人能帮上忙吗?

我已经通过遍历pdf操作符将图像和文本提取到两个pdf中。我面临着麻烦,当不删除的PDF背后的文本。

EN

回答 1

Stack Overflow用户

发布于 2018-10-30 21:20:14

删除文本的代码:

代码语言:javascript
运行
复制
PDDocument document = null;
    try {
        document = PDDocument.load(new File(inputfilePath), password);
        PDPageTree allPages = document.getDocumentCatalog().getPages();
        for (int i = 0; i < allPages.getCount(); i++) {
            PDPage page = (PDPage) allPages.get(i);
            PDFStreamParser parser = new PDFStreamParser(page);

            parser.parse();
            List tokens = parser.getTokens();
            List newTokens = new ArrayList();
            for (int j = 0; j < tokens.size(); j++) {
                Object token = tokens.get(j);
                if (token instanceof Operator) {
                    Operator op = (Operator) token;

                    if (op.getName().equalsIgnoreCase(
                            "tj")) {
                        try {
                            // remove the one argument to this operator
                            newTokens.remove(newTokens.size() - 1);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        continue;
                    }
                    // Header doesn't contain versioninfo

                }
                newTokens.add(token);

            }
            PDStream newContents = new PDStream(document);
            ContentStreamWriter writer = new ContentStreamWriter(newContents.createOutputStream());
            writer.writeTokens(newTokens);
            // In writeTokens method, I closed the output stream.. This is
            // for future reference.. or it will throw stream not closed
            // error
            newContents.addCompression();
            page.setContents(newContents);
            if (DEBUG)
                System.out.println("Background image pdf creation process");
            document.setAllSecurityToBeRemoved(true);
            document.save(outputFolder + "/img_" + fileName);

为了删除图像和阴影,我使用了以下代码:

代码语言:javascript
运行
复制
for (int j = 0; j < tokens.size(); j++) {
                Object token = tokens.get(j);
                if (token instanceof Operator) {
                    Operator op = (Operator) token;

                    // Text Extraction removing image and shades
                    if (op.getName().equalsIgnoreCase("do") || op.getName().equalsIgnoreCase("sh")

                            || op.getName().equalsIgnoreCase("gs") || op.getName().equalsIgnoreCase("bi")
                            || op.getName().equalsIgnoreCase("id") || op.getName().equalsIgnoreCase("ei")
                            || op.getName().equalsIgnoreCase("bmc") || op.getName().equalsIgnoreCase("bdc")
                            || op.getName().equalsIgnoreCase("emc") || op.getName().equalsIgnoreCase("m")
                            || op.getName().equalsIgnoreCase("w")
                            || op.getName().equalsIgnoreCase("re")

                    ) {
                        // remove the one argument to this operator
                        newTokens.remove(newTokens.size() - 1);
                        continue;
                    }
                }
                newTokens.add(token);

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

https://stackoverflow.com/questions/52334071

复制
相关文章

相似问题

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