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.
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");
}
}
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.
Wenn es einen besseren Weg gibt, lass es mich bitte wissen: heat_smile: