【问题标题】:Split PDF by delimiter?按分隔符拆分 PDF?
【发布时间】:2021-08-10 06:20:18
【问题描述】:

我将发票合并到一个 pdf 文件中。有些发票的大小是半页,而有些发票则大于一页。如何通过在每张发票开头使用静态文本作为分隔符将所有这些发票分隔为单独的文件?或者我可以使用您建议的其他方法。 Sample file.

【问题讨论】:

  • 您可以检查“Efactory Inc.”。在顶部。 (分别提取每一页)
  • 是否所有发票都从页面顶部开始?或者有时单页上有两张半页发票?
  • @mkl 是的,有时一页上可能会出现多个发票。但我现在没有。
  • “是的,有时一页上可能会出现多个发票。” - 如果您也想拆分它们,obourgain's answer 中提到的 Splitter再也不够了。 “但我目前没有。” - 好吧,如果没有该案例的代表性示例,我们几乎无法深入了解该选项的细节。因此,obourgain 的回答暂时只好做。

标签: java pdf split pdfbox


【解决方案1】:

您需要扩展 Splitter.splitAtPage 方法以指示您要在哪里拆分 PDF。

这是一个工作示例:

public class PdfBoxSplitter {
    private static String DELIMITER = "Efactory Inc";

    public static void main(String[] args) throws IOException {
        File file = new File("document.pdf");

        try (PDDocument document = PDDocument.load(file)) {

            // First find the list of pages where we need to split the PDF
            List<Integer> splitPages = new ArrayList<>();
            for (int page = 1; page <= document.getNumberOfPages(); page++) {
                PDFTextStripper pdfStripper = new PDFTextStripper();
                pdfStripper.setStartPage(page);
                pdfStripper.setEndPage(page);
                String parsedText = pdfStripper.getText(document);
                if (parsedText.contains(DELIMITER)) splitPages.add(page - 1);
            }

            // Instantiate the custom splitter 
            Splitter splitter = new Splitter() {
                protected boolean splitAtPage(int pageNumber) {
                    return splitPages.contains(pageNumber);
                }
            };

            // Split the document and save each part
            List<PDDocument> docs = splitter.split(document);
            int cpt = 1;
            for (PDDocument doc : docs) {
                File f = new File("Document" + (cpt++) + ".pdf");
                doc.save(f);
            }
        }
    }
}

【讨论】:

  • 不要忘记关闭文档列表中的 PDDocument 对象,但前提是所有对象都已保存。
猜你喜欢
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多