これは、上に長方形 (またはこの場合は正方形) を描く方法です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();
Documentオブジェクトは必要ありません。を作成し、左下隅が 100 x 100 ユーザー ユニットPdfCanvasの長方形を描画します。x = 36; y = 360
Documentも作成したいので、オブジェクトを導入しますLink。それも必要ありません。これを試すことができます(しかし、それは間違っているでしょう):
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();
ご覧のとおり、pdf(a PdfDocument) とpdf単独で作業します。Document関与はありません。ただし、Canvasオブジェクトへのリンクを追加しようとしています。PDF 構文をコンテンツ ストリームに追加するCanvas場合は、 を使用できます。リンクはコンテンツ ストリームの一部ではありません。リンクは、ページ ディクショナリのエントリに格納される注釈です。要するに、使用できないものに使用しています。/AnnotsCanvas
リンクを絶対位置に配置しようとしていて、そのリンクの周りに長方形を配置したいと思います。それは を使用して行われていませんCanvas。Paragraphaを絶対位置に置くと、はるかに簡単になります。
例えば:
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();
}
Paragraphこれにより、位置(x = 36; y = 650)と 80 ユーザー単位の幅が追加されます。の周りに 0.5 の太さの境界線を追加しParagraphます。
リンクがすべて間違っているため、これも機能しません。別の PDF ファイルGoToRの特定の宛先に移動することを意図した (リモートに移動) アクションを使用しています。代わりにURIアクションが必要だと思います:
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();
}
テキストの周りにより多くのスペースを確保したい場合は、パディングを変更できます。
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();
}
これは、達成しようとしたものよりもはるかに直感的です。