PDF Splitting

offi

Mitglied
Hi,
ich suche ein Beispiel wie man ein großes PDF Dokument mit bestimmten Header Texten splitten kann? Finde aber leider nur Beispiele wie man ein Dokument in einzelne Seiten zerlegt. Wer kennt oder hat ein Beispiel hierzu?

ciao,
offi
 

max40

Bekanntes Mitglied
Sind das dursuchbare PDF Dokumente?
Wenn z.B. auf der Seite an eine bestimmten Position z.B. "XXXX" steht, dann soll er das Dokument splitten?
Das ganze würde mit apache pdfbox gehen.
Beispiel Text aus PDF lesen: https://www.mkyong.com/java/pdfbox-how-to-read-pdf-file-in-java/
Wobei du auch einen Bereicht mitgeben kannst, den du nur haben willst:
Java:
            sStripper.addRegion("class1", rect);
            PDPage pdfpage = document.getPage(page);
            sStripper.extractRegions(pdfpage);
            String text = sStripper.getTextForRegion("class1");
Splitten: https://www.tutorialkart.com/pdfbox/pdfbox-split-pdf-document-into-multiple-pdfs/

Zusammenfügen falls immer nur jede 2. Seite gesplittet werden soll: https://www.tutorialkart.com/pdfbox/pdfbox-merge-multiple-pdfs/

ansonsten in pdfbox mal einlesen/testen, was so möglich ist.
 

offi

Mitglied
hm... ich kann zwar mit dem ersten Link von dir die Stelle finden aber woher weis ich auf welcher Seite das war?
 

offi

Mitglied
sorry aber das kann nicht funktionieren!?
Das würde nur gehen wenn man alle Dokumente in einzelne Seiten splittet, dann jede Seite durchsucht und anschließend wieder mergt? Oder verstehe ich da was falsch?
 

max40

Bekanntes Mitglied
Ja, Datei erstmal splitten in einzelne Dateien und dann eine Datei nach der anderen prüfen ob dein Suchbegriff enthalten ist und dann entsprechend die Dateien zusammenfügen.
 

mihe7

Top Contributor
Oder verstehe ich da was falsch?
Ja.

Java:
public class Test {

    String getText(PDPage page, Rectangle2D rect) throws IOException {
        PDFTextStripperByArea stripper = new PDFTextStripperByArea();
        stripper.addRegion("region", rect);
        stripper.extractRegions(page);
        return stripper.getTextForRegion("region");
    }

    boolean contains(PDPage page, String text) {
        try {
            PDRectangle pr = page.getBBox();
            Rectangle2D rect = new Rectangle2D.Float(
                pr.getLowerLeftX(), pr.getLowerLeftY(),
                pr.getWidth(), pr.getHeight());
            String textOnPage = getText(page, rect);
            return textOnPage.indexOf(text) != -1;
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        }
    }

    int[] getPageNumbers(PDDocument doc, String text) {
        return IntStream.range(0, doc.getNumberOfPages())
            .filter(ix -> contains(doc.getPage(ix), text))
            .toArray();
    }

    public static void main( String[] args ) {
        if (args.length != 2) {
            System.err.println("Parameter: file.pdf text");
            System.exit(0);
        }

        Test test = new Test();

        try(FileInputStream fis = new FileInputStream(args[0])) {
            PDDocument doc = PDDocument.load(fis);
            int[] pages = test.getPageNumbers(doc, args[1]);
            System.out.println(Arrays.toString(pages));
            doc.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
 

Neue Themen


Oben