これは、上に長方形 (またはこの場合は正方形) を描く方法です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
場合は、 を使用できます。リンクはコンテンツ ストリームの一部ではありません。リンクは、ページ ディクショナリのエントリに格納される注釈です。要するに、使用できないものに使用しています。/Annots
Canvas
リンクを絶対位置に配置しようとしていて、そのリンクの周りに長方形を配置したいと思います。それは を使用して行われていませんCanvas
。Paragraph
aを絶対位置に置くと、はるかに簡単になります。
例えば:
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();
}
これは、達成しようとしたものよりもはるかに直感的です。