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