这就是你如何在 a 上绘制一个矩形(或者在这种情况下是一个正方形)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
对象。您只需创建一个PdfCanvas
并绘制一个矩形形状,其左下角x = 36; y = 360
为 100 x 100 个用户单位。
您引入一个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
可以使用A。链接不是内容流的一部分。链接是存储在页面字典条目中的注释。简而言之:您正在使用它不能使用的东西。/Annots
Canvas
我认为您正在尝试将链接放在绝对位置,并且您想在该链接周围放置一个矩形。使用Canvas
. 如果您只是将 aParagraph
放在绝对位置,那就容易多了。
例如:
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
at 位置(x = 36; y = 650)
和 80 个用户单位的宽度。我们在Paragraph
.
这也不起作用,因为链接都是错误的。您正在使用GoToR
(转到远程)操作,该操作旨在转到另一个 PDF 文件中的特定目标。我认为您需要一个 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();
}
这比您尝试实现的要直观得多。