From e4e5cffd80ad8c21d6230a5518b487a629aeddd3 Mon Sep 17 00:00:00 2001
From: "1437892690@qq.com" <1437892690@qq.com>
Date: Wed, 22 Oct 2025 18:47:28 +0800
Subject: [PATCH] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=B0=86=E5=AF=BC?=
=?UTF-8?q?=E5=87=BAPDF=E4=BD=BF=E7=94=A8=E7=9A=84=E4=BE=9D=E8=B5=96?=
=?UTF-8?q?=E5=8C=85itextpdf=E6=94=B9=E6=88=90openpdf?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
关联 #[1537812061454336]将导出PDF使用的依赖包itextpdf改成openpdf http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1537812061454336
---
.../neatlogic/framework/util/ChineseFont.java | 5 ++-
.../neatlogic/framework/util/ExportUtil.java | 24 ++++++-------
.../util/pdf/AddPageNumberEvent.java | 12 +++----
.../framework/util/pdf/CharterInfoEvent.java | 35 ++++++++++---------
.../framework/util/pdf/PDFBuilder.java | 4 +--
.../framework/util/pdf/ParagraphBuilder.java | 8 ++---
.../framework/util/pdf/TableBuilder.java | 6 ++--
7 files changed, 49 insertions(+), 45 deletions(-)
diff --git a/src/main/java/neatlogic/framework/util/ChineseFont.java b/src/main/java/neatlogic/framework/util/ChineseFont.java
index b0c5b406b..ae4a6ac6c 100644
--- a/src/main/java/neatlogic/framework/util/ChineseFont.java
+++ b/src/main/java/neatlogic/framework/util/ChineseFont.java
@@ -33,8 +33,11 @@ public enum ChineseFont {
private final String fontFileName;
private final String fontName;
+ public String getPath() {
+ return "/neatlogic/resources/fonts/" + this.fontFileName;
+ }
public URL getFontUrl() {
- return this.getClass().getResource("/neatlogic/resources/fonts/" + this.fontFileName);
+ return this.getClass().getResource(getPath());
}
public String getFontName() {
diff --git a/src/main/java/neatlogic/framework/util/ExportUtil.java b/src/main/java/neatlogic/framework/util/ExportUtil.java
index 0419d4f8f..c96d988f0 100644
--- a/src/main/java/neatlogic/framework/util/ExportUtil.java
+++ b/src/main/java/neatlogic/framework/util/ExportUtil.java
@@ -1,9 +1,7 @@
package neatlogic.framework.util;
-import com.itextpdf.text.DocumentException;
-import com.itextpdf.text.PageSize;
-import com.itextpdf.text.pdf.PdfWriter;
-import com.itextpdf.tool.xml.XMLWorkerHelper;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.pdf.BaseFont;
import org.apache.commons.lang3.StringUtils;
import org.docx4j.Docx4J;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
@@ -21,11 +19,11 @@ import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Entities;
import org.w3c.tidy.Tidy;
+import org.xhtmlrenderer.pdf.ITextRenderer;
import javax.xml.bind.JAXBElement;
import java.io.*;
import java.math.BigInteger;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -367,14 +365,14 @@ public class ExportUtil {
* @throws DocumentException
*/
public static void savePdf(String content, OutputStream os, boolean landscape) throws IOException, DocumentException {
- com.itextpdf.text.Document doc = new com.itextpdf.text.Document(landscape ? PageSize.A4 : PageSize.A4.rotate());
- PdfWriter writer = PdfWriter.getInstance(doc, os);
- doc.open();
- ByteArrayInputStream bis = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
- XMLWorkerHelper.getInstance().parseXHtml(writer, doc, bis, StandardCharsets.UTF_8);
- bis.close();
- doc.close();
- writer.close();
+ ITextRenderer renderer = new ITextRenderer();
+ ChineseFont[] fonts = ChineseFont.values();
+ for (ChineseFont font : fonts) {
+ renderer.getFontResolver().addFont(font.getPath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
+ }
+ renderer.setDocumentFromString(content);
+ renderer.layout();
+ renderer.createPDF(os);
}
}
diff --git a/src/main/java/neatlogic/framework/util/pdf/AddPageNumberEvent.java b/src/main/java/neatlogic/framework/util/pdf/AddPageNumberEvent.java
index f975d8f50..b6f46bd58 100644
--- a/src/main/java/neatlogic/framework/util/pdf/AddPageNumberEvent.java
+++ b/src/main/java/neatlogic/framework/util/pdf/AddPageNumberEvent.java
@@ -15,12 +15,12 @@ along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.Document;
-import com.itextpdf.text.Element;
-import com.itextpdf.text.Phrase;
-import com.itextpdf.text.pdf.ColumnText;
-import com.itextpdf.text.pdf.PdfPageEventHelper;
-import com.itextpdf.text.pdf.PdfWriter;
+import com.lowagie.text.Document;
+import com.lowagie.text.Element;
+import com.lowagie.text.Phrase;
+import com.lowagie.text.pdf.ColumnText;
+import com.lowagie.text.pdf.PdfPageEventHelper;
+import com.lowagie.text.pdf.PdfWriter;
/**
* 添加页码事件
diff --git a/src/main/java/neatlogic/framework/util/pdf/CharterInfoEvent.java b/src/main/java/neatlogic/framework/util/pdf/CharterInfoEvent.java
index 517e407a5..8532c52f6 100644
--- a/src/main/java/neatlogic/framework/util/pdf/CharterInfoEvent.java
+++ b/src/main/java/neatlogic/framework/util/pdf/CharterInfoEvent.java
@@ -15,11 +15,12 @@ along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.Chunk;
-import com.itextpdf.text.Document;
-import com.itextpdf.text.Paragraph;
-import com.itextpdf.text.pdf.PdfPageEventHelper;
-import com.itextpdf.text.pdf.PdfWriter;
+import com.lowagie.text.Chunk;
+import com.lowagie.text.Document;
+import com.lowagie.text.Element;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.pdf.PdfPageEventHelper;
+import com.lowagie.text.pdf.PdfWriter;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
@@ -39,18 +40,20 @@ public class CharterInfoEvent extends PdfPageEventHelper {
@Override
public void onChapter (PdfWriter writer, Document document, float paragraphPosition, Paragraph title) {
- List chunks = title.getChunks();
+ List chunks = title.getChunks();
if (CollectionUtils.isNotEmpty(chunks)) {
- for (Chunk chunk : chunks) {
- Map attributes = chunk.getAttributes();
- if (MapUtils.isEmpty(attributes)) {
- continue;
+ for (Element element : chunks) {
+ if (element instanceof Chunk chunk) {
+ Map attributes = chunk.getChunkAttributes();
+ if (MapUtils.isEmpty(attributes)) {
+ continue;
+ }
+ String localDestination = (String) attributes.get(Chunk.LOCALDESTINATION);
+ if (localDestination == null) {
+ continue;
+ }
+ localDestinationMap.put(title.getContent(), localDestination);
}
- String localDestination = (String) attributes.get(Chunk.LOCALDESTINATION);
- if (localDestination == null) {
- continue;
- }
- localDestinationMap.put(title.getContent(), localDestination);
break;
}
}
@@ -70,7 +73,7 @@ public class CharterInfoEvent extends PdfPageEventHelper {
public String getLocalDestination(String key) {
return localDestinationMap.get(key);
}
-
+
public Integer getDepth(String key) {
return depthMap.get(key);
}
diff --git a/src/main/java/neatlogic/framework/util/pdf/PDFBuilder.java b/src/main/java/neatlogic/framework/util/pdf/PDFBuilder.java
index b6df38f5b..929cc5cb1 100644
--- a/src/main/java/neatlogic/framework/util/pdf/PDFBuilder.java
+++ b/src/main/java/neatlogic/framework/util/pdf/PDFBuilder.java
@@ -14,8 +14,8 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.*;
-import com.itextpdf.text.pdf.PdfPTable;
+import com.lowagie.text.*;
+import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.PageSize;
import java.io.IOException;
diff --git a/src/main/java/neatlogic/framework/util/pdf/ParagraphBuilder.java b/src/main/java/neatlogic/framework/util/pdf/ParagraphBuilder.java
index 8dd8c5e85..267b33173 100644
--- a/src/main/java/neatlogic/framework/util/pdf/ParagraphBuilder.java
+++ b/src/main/java/neatlogic/framework/util/pdf/ParagraphBuilder.java
@@ -14,10 +14,10 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.DocumentException;
-import com.itextpdf.text.Font;
-import com.itextpdf.text.Paragraph;
-import com.itextpdf.text.pdf.BaseFont;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.Font;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.pdf.BaseFont;
import java.io.IOException;
diff --git a/src/main/java/neatlogic/framework/util/pdf/TableBuilder.java b/src/main/java/neatlogic/framework/util/pdf/TableBuilder.java
index c19f70132..01f24a74c 100644
--- a/src/main/java/neatlogic/framework/util/pdf/TableBuilder.java
+++ b/src/main/java/neatlogic/framework/util/pdf/TableBuilder.java
@@ -14,9 +14,9 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.Paragraph;
-import com.itextpdf.text.pdf.PdfPCell;
-import com.itextpdf.text.pdf.PdfPTable;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.pdf.PdfPCell;
+import com.lowagie.text.pdf.PdfPTable;
/**
* @author longrf
--
Gitee