Это, как вы могли бы нарисовать прямоугольник (или в данном случае, квадрат) на 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
. A Canvas
может использоваться, если вы хотите добавить синтаксис PDF в поток контента . Ссылка не является частью потока контента. Ссылка представляет собой аннотацию, которая хранится в записи /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 единиц пользователя. Добавим 0,5-кратную границу вокруг 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();
}
Это гораздо более интуитивным, чем то, что вы пытались достигать.
Почему проголосовали? Это законный вопрос! Я думаю, что знаю ответ, но сначала мне нужно его проверить. (В то же время я «расстегнул» проголосовавший по голосу.) –