Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于页面内容的选择性PDF拆分_Java_Pdf_Itext - Fatal编程技术网

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

Java 基于页面内容的选择性PDF拆分,java,pdf,itext,Java,Pdf,Itext,我想根据当前页面文本将父PDF拆分为子PDF。如果第x页只包含“ABC”文本,那么我将拆分该PDF。但是,带有拆分器的代码从PDF的第1页开始 String currentPageText = PdfTextExtractor.getTextFromPage(reader, page, strategy); if (currentPageText.contains(searchText)) { System.out

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

 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);
            }

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

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();
}
private List definiteSplitRanges(文件输入文件)
{   
PdfReader reader=新的PdfReader(inputFile.getAbsolutePath());
PdfDocument PdfDocument=新PdfDocument(读卡器);
List splitPages=new ArrayList();

对于(int i=1;isplitByPageNumbers(l),根据页码将其拆分为多个PDF。例如:如果我有文本“ABC”在第3页和第30页上,它将3个pdf文件拆分为第1页到第3页、第3页到第30页和第30页到最后。我希望在我有搜索文本的地方只拆分第3页和第30页。如果您不想拆分pdf文件,您想根据搜索标准提取一些页面。重新命名您的问题。更改问题以反映您想提取页面,不是拆分文档。Goutham,我是否正确理解您对@Joris回答的评论,即您实际上希望用ABC替换一个页面,一个页面的内容为ABC,另一个页面的内容为ABC,然后在这些页面对之间拆分文档?如果页面(例如:第3页)包含文本“ABC”在10页pdf中,只有第3页应该是目标位置的新pdf。
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();