基于页面内容的选择性PDF分割

时间:2017-06-09 08:44:37

标签: java pdf itext

我希望根据当前页面文本将父PDF拆分为子PDF。如果页面x只包含文本'ABC',那么我会拆分该PDF。但是,带有拆分器的代码从PDF的第一页开始。

 String currentPageText = PdfTextExtractor.getTextFromPage(reader, page, strategy);
            if (currentPageText.contains(searchText))
            {
                System.out.println("Current page"+page);
                splitter.split(new FileOutputStream("H:/Work/PDFs/Purchase & Sale Activity____" + page + ".pdf"), 200000);
            }

1 个答案:

答案 0 :(得分:0)

我会把这个问题分成几部分。 首先确定哪些页面包含查询字符串。 您可以使用ITextExtractionStrategy(或者更确切地说是实现它的类)。

private List<Integer> determineSplitRanges(File inputFile)
{   
    PdfReader reader = new PdfReader(inputFile.getAbsolutePath());
    PdfDocument pdfDocument = new PdfDocument(reader);
    List<Integer> splitPages = new ArrayList<>();
    for(int i=1;i<=pdfDocument.getNumberOfPages();i++)
    {
        String txt = PdfTextExtractor.getTextFromPage(pdfDocument.getPage(i));
        if(txt.contains("ABC")
        {
            splitPages.add(i);
        }
    }
    pdfDocument.close();
}

然后根据该信息拆分文档。

PdfReader reader = new PdfReader(inputFile.getAbsolutePath());
PdfDocument pdfDocument = new PdfDocument(reader);
List<PdfDocument> splitDocuments = new PdfSplitter(pdfDocument) {
    int partNumber = 1;
    @Override
    protected PdfWriter getNextPdfWriter(PageRange documentPageRange) {
    try {
        return new PdfWriter(destFolder + "splitDocument1_" + String.valueOf(partNumber++) + ".pdf");
    } catch (FileNotFoundException e) {
        throw new RuntimeException();
    }
}}.splitByPageNumbers(l);

// close sub-documents
for (PdfDocument doc : splitDocuments)
    doc.close();

// close master document
pdfDocument.close();

这应该解决问题。