這是你如何可以畫一個矩形(或在這種情況下,一個正方形)上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乘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
(一PdfDocument
)和pdf
單獨工作。沒有涉及Document
。但是,您正試圖添加指向Canvas
對象的鏈接。如果您想要將PDF語法添加到內容流,則可以使用Canvas
。鏈接不是內容流的一部分。鏈接是存儲在頁面字典的/Annots
條目中的註釋。簡而言之:您正在使用Canvas
,因爲它無法使用。
我認爲你正在試圖把一個鏈接放在絕對位置,並且你想要在該鏈接周圍放一個矩形。這不是使用Canvas
完成的。如果您只將Paragraph
置於絕對位置,則更容易。
例如:
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個用戶單位的寬度。我們在Paragraph
周圍添加了一個0.5厚的邊框。
這也行不通,因爲鏈接都是錯誤的。您正在使用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();
}
這比你嘗試過什麼更直觀實現。
爲什麼倒票?這是一個合法的問題!我想我知道答案,但我需要先測試它。 (與此同時,我「不負責任」地加入了贊成票。) –