2017-06-09 44 views
-1

我期待根據當前頁面文本將父級PDF分割爲子PDF。如果第x頁包含文本「ABC」,那麼我會分割該PDF。但是,帶分隔符的代碼從PDF的第1頁開始。基於頁面內容分割的選擇性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); 
      } 
+0

更改問題以反映您想要提取頁面,而不是拆分文檔。 –

+0

Goutham,我理解你對@Joris的回答是否正確,你是否真的想用ABC替換一個頁面兩個頁面,一個內容最多ABC,一個內容跟隨ABC,然後拆分文檔這些頁面對之間? – mkl

+0

如果頁面(例如:頁面3)的10頁PDF格式中包含「ABC」文本,則只有第3頁應該是目標位置的新PDF。 – Goutham

回答

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

這應該解決問題。

+0

splitByPageNumbers(l)根據頁面號分成多個PDF。示例:如果我在第3頁和第30頁上有文本「ABC」,則會將3個PDF頁面1至3_,_頁面3至30_和_頁面30拆分爲end_。 **我希望只有第3頁和第30頁分開,我有我的搜索文本** – Goutham

+0

然後你不想分割pdf,你想根據搜索標準提取一些頁面。 重新說出你的問題。 –