Слияние кода завершено, страница обновится автоматически
Зависимости:
<dependency>
<groupId>org.dromara</groupId>
<artifactId>x-easypdf</artifactId>
<version>3.3.0</version>
</dependency>
Инструкция по использованию с примером тестирования:
public class WaterMarkTest {
public static void main(String[] args) {
// Определение пути вывода
String outputPath = "D:\\WorkSpace\\Java\\console\\test.pdf";
// Создание документа
Document document = TemplateHandler.Document.build();
// Создание страницы (пустая страница)
Page page = TemplateHandler.Page.build();
// Создание многострочной ватермарки
Watermark watermark = TemplateHandler.Watermark.build()
// Установка ID водяного знака
.setId("test")
// Установка текста водяного знака
.setText("Первая строка", "Вторая строка")
// Установка размера шрифта текста водяного знака
.setFontSize("30pt")
// Установка ширины изображения водяного знака
.setWidth("300pt")
// Установка высоты изображения водяного знака
.setHeight("200pt")
// Установка ширины отображения водяного знака
.setShowWidth("200pt")
// Включение перезаписи файла
.enableOverwrite();
// Добавление водяного знака
page.setBodyWatermark(watermark);
// Добавление страницы
document.addPage(page);
// Преобразование PDF
document.transform(outputPath);
}
}
Ошибка:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.apache.fop.fonts.FontInfo.findAdjustWeight(String, String, int)" because "fontInfo" is null
at org.dromara.pdf.fop.util.FontUtil.createAWTFont(FontUtil.java:54)
at org.dromara.pdf.fop.core.doc.watermark.Watermark.createImage(Watermark.java:432)
at org.dromara.pdf.fop.core.doc.watermark.Watermark.getImageFile(Watermark.java:383)
at org.dromara.pdf.fop.core.doc.watermark.Watermark.putCache(Watermark.java:356)
at org.dromara.pdf.fop.core.doc.watermark.Watermark.getImageUrl(Watermark.java:338)
at org.dromara.pdf.fop.core.doc.watermark.Watermark.createWatermark(Watermark.java:305)
at org.dromara.pdf.fop.core.doc.page.Page.lambda$initRegion$27(Page.java:1189)
at java.base/java.util.Optional.ifPresent(Optional.java:178)
at org.dromara.pdf.fop.core.doc.page.Page.initRegion(Page.java:1189)
at org.dromara.pdf.fop.core.doc.page.Page.createRegionBody(Page.java:1087)
at org.dromara.pdf.fop.core.doc.page.Page.createSimplePageMaster(Page.java:1056)
at org.dromara.pdf.fop.core.doc.page.Page.addLayoutMasterSet(Page.java:1026)
at org.dromara.pdf.fop.core.doc.page.Page.createElement(Page.java:1005)
at org.dromara.pdf.fop.core.doc.Document.addPage(Document.java:414)
at org.dromara.pdf.fop.core.doc.Document.getDocument(Document.java:347)
at org.dromara.pdf.fop.core.datasource.DocumentDataSource.processTemplate(DocumentDataSource.java:68)
at org.dromara.pdf.fop.core.datasource.AbstractDataSource.getInputStream(AbstractDataSource.java:86)
at org.dromara.pdf.fop.core.datasource.AbstractDataSource.getSourceReader(AbstractDataSource.java:53)
at org.dromara.pdf.fop.core.datasource.DocumentDataSource.getSourceReader(DocumentDataSource.java:35)
at org.dromara.pdf.fop.core.datasource.DataSource.getDocumentContent(DataSource.java:147)
at org.dromara.pdf.fop.core.base.Template.transform(Template.java:371)
at org.dromara.pdf.fop.core.doc.Document.transform(Document.java:331)
at org.dromara.pdf.fop.core.doc.DocumentComponent.transform(DocumentComponent.java:40)