ist, wie Sie ein Rechteck zeichnen konnte (oder in diesem Fall ein Quadrat) auf einem 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();
Sie brauchen nicht ein Document
Objekt benötigen. Sie erstellen einfach eine PdfCanvas
und zeichnen eine rechteckige Form mit der unteren linken Ecke x = 36; y = 360
, die 100 mal 100 Benutzereinheiten misst.
Sie führen ein Document
Objekt ein, weil Sie auch ein Link
erstellen möchten. Das ist auch nicht notwendig. Sie könnten versuchen, diese (aber das wäre falsch):
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();
Wie Sie sehen können, arbeiten wir mit pdf
(a PdfDocument
) und pdf
allein. Es gibt keine Document
beteiligt. Sie versuchen jedoch, eine Verknüpfung zu einem Objekt Canvas
hinzuzufügen. A Canvas
kann verwendet werden, wenn Sie dem Content-Stream PDF-Syntax hinzufügen möchten. Ein Link ist nicht Teil des Content-Streams. Eine Verknüpfung ist eine Anmerkung, die im /Annots
-Eintrag des Seitenwörterbuchs gespeichert ist. Kurz gesagt: Sie verwenden Canvas
für etwas, das nicht verwendet werden kann.
Ich glaube, Sie versuchen, eine Verbindung zu einer absoluten Position zu bringen, und dass Sie diesen Link, um ein Rechteck setzen wollen um. Das ist nicht mit Canvas
getan. Es ist viel einfacher, wenn Sie einfach eine Paragraph
an einer absoluten Position setzen.
Zum Beispiel:
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();
}
Dieses Add a Paragraph
an Position (x = 36; y = 650)
und eine Breite von 80 Benutzereinheiten. Wir fügen einen 0,5 dicken Rand um die Paragraph
hinzu.
Dies wird auch nicht funktionieren, weil die Verbindung falsch ist. Sie verwenden eine GoToR
(gehen zu Remote) Aktion, die zu einem bestimmten Ziel in einer anderen PDF-Datei gehen soll. Ich glaube, dass Sie eine URI Aktion wollen statt:
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();
}
Wenn Sie wollen, um den Text mehr Platz zu bekommen, können Sie die Polsterung ändern:
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();
}
Das ist viel intuitiver als das, was Sie versucht haben, erreichen.
Warum die Abstimmung unten? Dies ist eine legitime Frage! Ich denke, ich kenne die Antwort, aber ich muss es zuerst testen. (In der Zwischenzeit habe ich das Down-Vote mit einem Up-Vote "rückgängig gemacht".) –