Voici comment vous pouvez dessiner un rectangle (ou dans ce cas, un carré) sur un PdfCanvas
:
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfPage page = pdf.addNewPage();
PdfCanvas pdfCanvas = new PdfCanvas(page);
Rectangle rectangle = new Rectangle(36, 650, 100, 100);
pdfCanvas.rectangle(rectangle);
pdfCanvas.stroke();
pdf.close();
Vous n'avez pas besoin d'un objet Document
. Vous venez de créer un PdfCanvas
et vous dessinez une forme rectangulaire avec comme coin inférieur gauche x = 36; y = 360
mesurant 100 par 100 unités d'utilisateur. Vous introduisez un objet Document
, car vous souhaitez également créer un Link
. Ce n'est pas non plus nécessaire. Vous pouvez essayer cela (mais ce serait une erreur):
Canvas canvas = new Canvas(pdfCanvas, pdf, rectangle);
canvas.add(new Paragraph().add("Google"));
canvas.add(new Paragraph(new Link("Google", PdfAction.createGoToR("HELLO", "www.google.com"))));
pdf.close();
Comme vous pouvez le voir, nous travaillons avec pdf
(un PdfDocument
) et pdf
seul. Il n'y a pas de Document
impliqués. Cependant, vous essayez d'ajouter un lien vers un objet Canvas
. Un Canvas
peut être utilisé si vous souhaitez ajouter une syntaxe PDF au flux de contenu . Un lien ne fait pas partie du flux de contenu. Un lien est une annotation stockée dans l'entrée /Annots
du dictionnaire de pages. En bref: vous utilisez Canvas
pour quelque chose qu'il ne peut pas être utilisé.
Je pense que vous essayez de mettre un lien à une position absolue et que vous voulez mettre un rectangle autour de ce lien. Ce n'est pas fait en utilisant Canvas
. C'est beaucoup plus facile si vous mettez simplement un Paragraph
à une position absolue.
Par exemple:
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
Document document = new Document(pdf);
Paragraph p = new Paragraph()
.add(new Link("Google", PdfAction.createGoToR("HELLO", "www.google.com")))
.setFixedPosition(36, 650, 80)
.setBorder(new SolidBorder(0.5f));
document.add(p);
document.close();
}
Cette ajouter une Paragraph
à la position (x = 36; y = 650)
et une largeur de 80 unités utilisateur. Nous ajoutons une bordure d'épaisseur 0,5 autour du Paragraph
.
Cela ne fonctionnera pas non plus, car le lien est tout faux. Vous utilisez une action GoToR
(aller à distance) qui est destinée à aller à une destination spécifique dans un autre fichier PDF. Je pense que vous voulez une action URI à la place:
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
Document document = new Document(pdf);
Paragraph p = new Paragraph()
.add(new Link("Google", PdfAction.createURI("www.google.com")))
.setFixedPosition(36, 650, 80)
.setBorder(new SolidBorder(0.5f));
document.add(p);
document.close();
}
Si vous souhaitez obtenir plus d'espace autour du texte, vous pouvez modifier le rembourrage:
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
Document document = new Document(pdf);
Paragraph p = new Paragraph()
.add(new Link("Google", PdfAction.createURI("www.google.com")))
.setFixedPosition(36, 650, 80)
.setPadding(10)
.setBorder(new SolidBorder(0.5f));
document.add(p);
document.close();
}
Cela est beaucoup plus intuitif que ce que vous avez essayé atteindre.
Pourquoi le vote négatif? C'est une question légitime! Je pense que je connais la réponse, mais je dois d'abord la tester. (Pendant ce temps, j'ai "défait" le vote négatif avec une mise à jour.) –