J'avais un besoin de niche pour dessiner des lignes sur un document PDF existant en utilisant PDFBox, donc je vais vous montrer comment. Par exemple, sous forme de soumission au gouvernement, on suppose qu'une ligne d'annulation sera tracée sur les parties non pertinentes en fonction du contenu de la demande.
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); //Coordonnées du point de départ
contents.lineTo(365f, 808f); //Coordonnées du point final
contents.setLineWidth(1f); //Épaisseur de ligne
contents.stroke(); //dessin
contents.moveTo(290f, 805f); //Coordonnées du point de départ
contents.lineTo(365f, 805f); //Coordonnées du point final
contents.setLineWidth(1f); //Épaisseur de ligne
contents.stroke(); //dessin
contents.close();
doc.save("/tmp/output.pdf");
}
}
Il semble y avoir un moyen plus intelligent, comme utiliser les bons outils, mais je ne savais pas, alors j'ai décidé de dessiner moi-même le système de coordonnées, ce qui est flou.
void grid() throws IOException {
try (InputStream is = getInputStream("sample.pdf");
PDDocument doc = PDDocument.load(is)) {
PDPage page = doc.getPage(0);
//Dessinez une grille du bas à gauche vers le haut à droite de la page
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");
}
}
Après cela, si vous comptez l'échelle à partir du coin inférieur gauche, vous pouvez spécifier les coordonnées approximatives de la position que vous souhaitez dessiner.
S'il existe un meilleur moyen, veuillez me le faire savoir: sweat_smile: