[JAVA] Zeichnen Sie mit PDFBox eine Linie in ein vorhandenes PDF-Dokument

Ich hatte ein Nischenbedürfnis, mit PDFBox Linien in ein vorhandenes PDF-Dokument zu ziehen, also zeige ich Ihnen, wie. Beispielsweise wird in Form einer Einreichung bei der Regierung davon ausgegangen, dass je nach Inhalt des Antrags eine Stornierungslinie für irrelevante Teile gezogen wird.

image.png

Bestätigungsumgebung

Realisierungsmethode

void line() throws IOException {
    try (InputStream is = getInputStream("sample.pdf");
         PDDocument doc = PDDocument.load(is)) {

        PDPage page = doc.getPage(0);
        PDPageContentStream contents = new PDPageContentStream(doc, page, AppendMode.APPEND, false);

        contents.moveTo(290f, 808f); //Startpunktkoordinaten
        contents.lineTo(365f, 808f); //Endpunktkoordinaten
        contents.setLineWidth(1f);   //Dicke der Linie
        contents.stroke();           //Zeichnung

        contents.moveTo(290f, 805f); //Startpunktkoordinaten
        contents.lineTo(365f, 805f); //Endpunktkoordinaten
        contents.setLineWidth(1f);   //Dicke der Linie
        contents.stroke();           //Zeichnung

        contents.close();
        doc.save("/tmp/output.pdf");
    }
}

Angeben der Zeichenposition

Es scheint einen intelligenteren Weg zu geben, beispielsweise die richtigen Werkzeuge zu verwenden, aber ich wusste es nicht, also habe ich beschlossen, das Koordinatensystem selbst zu zeichnen, was schlammig ist.

void grid() throws IOException {
    try (InputStream is = getInputStream("sample.pdf");
         PDDocument doc = PDDocument.load(is)) {
        PDPage page = doc.getPage(0);

        //Zeichnen Sie ein Raster von links unten nach rechts oben auf der Seite
        PDPageContentStream contents = new PDPageContentStream(doc, page, AppendMode.APPEND, false);
        PDRectangle bbox = page.getBBox();
        for (float x = 0; x < bbox.getWidth(); x += 10) {
            contents.moveTo(bbox.getLowerLeftX() + x, bbox.getLowerLeftY());
            contents.lineTo(bbox.getLowerLeftX() + x, bbox.getUpperRightY());
            contents.setLineWidth((x % 100 == 0) ? 2f : 0.5f);
            contents.stroke();
        }
        for (float y = 0; y < bbox.getHeight(); y += 10) {
            contents.moveTo(bbox.getLowerLeftX(), bbox.getLowerLeftY() + y);
            contents.lineTo(bbox.getUpperRightX(), bbox.getLowerLeftY() + y);
            contents.setLineWidth((y % 100 == 0) ? 2f : 0.5f);
            contents.stroke();
        }
        contents.close();

        doc.save("/tmp/output.pdf");
    }
}

Wenn Sie danach die Skala von links unten zählen, können Sie die groben Koordinaten der Position angeben, die Sie zeichnen möchten.

image.png

Wenn es einen besseren Weg gibt, lass es mich bitte wissen: heat_smile:

Recommended Posts

Zeichnen Sie mit PDFBox eine Linie in ein vorhandenes PDF-Dokument
Verwenden des lokalen Netzwerks mit iOS 14
Duplizieren Sie ein Objekt mit einem generischen Typ
Senden Sie E-Mails mit JavaMail unter AWS