В вашем коде вы имеете дело с довольно низкоуровневым API. Хотя ваша задача довольно проста, и низкоуровневый API все еще здесь достаточен, с высокоуровневым API макета вы можете достичь цели гораздо быстрее.
Для начала вы можете повторно использовать свой код для создания PdfDocument
и определения URL для SVG-изображения:
PdfDocument doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\\test.pdf")),
new WriterProperties().setCompressionLevel(0)));
String svgPath = "...svgPathHere";
Затем, вместо немедленного рисования изображения SVG на странице, вы можете преобразовать его в объект Image
из API layout
, который можно настроить: масштабировать для соответствия определенным размерам, установить фиксированное положение (левая нижняя точка) и так далее:
Image image = SvgConverter.convertToImage(new FileInputStream(svgPath), doc);
image.setFixedPosition(100, 200);
image.scaleToFit(300, 300);
Чтобы связать все вместе, создайте объект высокого уровня Document
и добавьте туда свое изображение. Не забудьте закрыть экземпляр Document
. Вам больше не нужно закрывать оригинал PdfDocument
:
Document layoutDoc = new Document(doc);
layoutDoc.add(image);
layoutDoc.close();