From 05b90051201c6e7b354019153eaf4ef26f52170a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 25 Sep 2025 17:55:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B0=86pdf=E4=BD=BF=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E5=A4=96=E6=8C=82=EF=BC=8C=E5=87=8F=E5=B0=91?= =?UTF-8?q?=E6=89=93=E5=8C=85=E7=9A=84jar=E4=BD=93=E7=A7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{src/main/resources => }/fonts/simsun.ttc | Bin .../com/nflg/wms/admin/util/PathUtils.java | 22 +++++++++++++ .../nflg/wms/admin/util/PdfGeneratorUtil.java | 31 ++++++++++++++++-- .../java/com/nflg/wms/admin/DeployTest.java | 2 ++ 4 files changed, 52 insertions(+), 3 deletions(-) rename nflg-wms-admin/{src/main/resources => }/fonts/simsun.ttc (100%) create mode 100644 nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/PathUtils.java diff --git a/nflg-wms-admin/src/main/resources/fonts/simsun.ttc b/nflg-wms-admin/fonts/simsun.ttc similarity index 100% rename from nflg-wms-admin/src/main/resources/fonts/simsun.ttc rename to nflg-wms-admin/fonts/simsun.ttc diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/PathUtils.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/PathUtils.java new file mode 100644 index 00000000..7fc40df2 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/PathUtils.java @@ -0,0 +1,22 @@ +package com.nflg.wms.admin.util; + +import java.io.File; + +public class PathUtils { + + public static String getPath() { + String classPath = PathUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath(); + System.out.println("classPath:" + classPath); + // 如果是jar包运行,获取jar包所在目录 + if (classPath.contains(".jar")) { + File jarFile = new File(classPath); + return jarFile.getParent(); + } + // 如果是开发环境,获取target/classes目录的父目录 + File classDir = new File(classPath); + if (classDir.getName().equals("classes")) { + return classDir.getParentFile().getParentFile().getAbsolutePath(); + } + return new File(classPath).getAbsolutePath(); + } +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/PdfGeneratorUtil.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/PdfGeneratorUtil.java index eae70c8a..42e1d24b 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/PdfGeneratorUtil.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/PdfGeneratorUtil.java @@ -1,20 +1,33 @@ package com.nflg.wms.admin.util; import com.lowagie.text.pdf.BaseFont; +import com.nflg.wms.common.util.VUtil; import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.io.FilenameUtils; import org.springframework.core.io.ClassPathResource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.xhtmlrenderer.pdf.ITextRenderer; +import java.io.File; +import java.io.IOException; import java.io.OutputStream; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; public class PdfGeneratorUtil { - private static final String fontPath = "fonts/simsun.ttc"; + private static final Set SUPPORTED_EXTENSIONS = new HashSet<>(Arrays.asList( + "ttf", "ttc", "otf", "pfb" + )); public static void generatePdf(String name,String html, HttpServletResponse response) throws Exception { URL baseUrl = new ClassPathResource("template/").getURL(); @@ -23,7 +36,7 @@ public class PdfGeneratorUtil { public static void generatePdf(String name,String html,String baseUrl, HttpServletResponse response) throws Exception { ITextRenderer renderer = new ITextRenderer(); - renderer.getFontResolver().addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + loadFonts(renderer); renderer.setDocumentFromString(html,baseUrl); renderer.layout(); renderer.createPDF(response.getOutputStream()); @@ -39,9 +52,21 @@ public class PdfGeneratorUtil { public static void generatePdf(String name,String html,String baseUrl,OutputStream output) throws Exception { ITextRenderer renderer = new ITextRenderer(); - renderer.getFontResolver().addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + loadFonts(renderer); renderer.setDocumentFromString(html,baseUrl); renderer.layout(); renderer.createPDF(output); } + + private static void loadFonts(ITextRenderer renderer) throws IOException { + Path fontsDir = Paths.get(PathUtils.getPath(), "fonts"); + VUtil.trueThrowBusinessError(!Files.exists(fontsDir) || !Files.isDirectory(fontsDir)) + .throwMessage("fonts文件夹不存在: " + fontsDir); + File directory = fontsDir.toFile(); + File[] fonts = directory.listFiles((dir, name) -> SUPPORTED_EXTENSIONS.contains(FilenameUtils.getExtension(name))); + VUtil.trueThrowBusinessError(Objects.isNull(fonts) || fonts.length == 0).throwMessage("未找到有效字体"); + for (File font : fonts) { + renderer.getFontResolver().addFont(font.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED); + } + } } \ No newline at end of file diff --git a/nflg-wms-admin/src/test/java/com/nflg/wms/admin/DeployTest.java b/nflg-wms-admin/src/test/java/com/nflg/wms/admin/DeployTest.java index ae3eab5c..07def21d 100644 --- a/nflg-wms-admin/src/test/java/com/nflg/wms/admin/DeployTest.java +++ b/nflg-wms-admin/src/test/java/com/nflg/wms/admin/DeployTest.java @@ -35,6 +35,8 @@ public class DeployTest { sshUtil.connect("192.168.163.84", 22, "root", "CMP2025nf"); //处理主jar包 handleFile(sshUtil, localPath + jarName, remotePath + jarName); + //处理字体目录 + handleDir(sshUtil, localPath, remotePath, "fonts"); //处理lib目录 handleDir(sshUtil, localPath, remotePath, "lib"); //执行脚本启动服务