ezhizao_zx 1 tahun lalu
induk
melakukan
2552897da5

+ 33 - 8
src/main/java/cn/ezhizao/common/utils/PdfUtil.java

@@ -2,23 +2,38 @@ package cn.ezhizao.common.utils;
 
 import com.itextpdf.html2pdf.ConverterProperties;
 import com.itextpdf.html2pdf.HtmlConverter;
+import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
+import com.itextpdf.io.font.FontProgram;
+import com.itextpdf.io.font.FontProgramFactory;
+import com.itextpdf.io.font.PdfEncodings;
 import com.itextpdf.kernel.font.PdfFont;
+import com.itextpdf.kernel.font.PdfFontFactory;
 import com.itextpdf.kernel.geom.PageSize;
 import com.itextpdf.kernel.pdf.PdfDocument;
 import com.itextpdf.kernel.pdf.PdfWriter;
 import com.itextpdf.layout.font.FontProvider;
+import com.itextpdf.text.Document;
+import com.itextpdf.text.Font;
+import com.itextpdf.text.pdf.BaseFont;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 
 import java.io.*;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 public class PdfUtil {
     @Autowired
     private Configuration configuration;
+
+    @Value("${ruoyi.pdfFontPath.url}")
+    private static String fontPath;
+
     /**
      * 获取模板内容
+     *
      * @param templateDirectory 模板文件夹
      * @param templateName      模板文件名
      * @param paramMap          模板参数
@@ -34,16 +49,18 @@ public class PdfUtil {
         }
 
         Writer out = new StringWriter();
-        Template template = configuration.getTemplate(templateName,"UTF-8");
+        Template template = configuration.getTemplate(templateName, "UTF-8");
         template.process(paramMap, out);
         out.flush();
         out.close();
         return out.toString();
     }
+
     /**
      * HTML 转 PDF
+     *
      * @param content html内容
-     * @param outPath           输出pdf路径
+     * @param outPath 输出pdf路径
      * @return 是否创建成功
      */
     public static boolean html2Pdf(String content, String outPath) {
@@ -51,17 +68,22 @@ public class PdfUtil {
             ConverterProperties converterProperties = new ConverterProperties();
             converterProperties.setCharset("UTF-8");
             FontProvider fontProvider = new FontProvider();
-            fontProvider.addSystemFonts();
+            fontProvider.addDirectory("/usr/share/fonts/chinese/");
+            fontProvider.addDirectory("D:\\code\\yzbh\\ezhizao_yzbh_production_api\\fonts\\chinese");
+//            fontProvider.addSystemFonts();
             converterProperties.setFontProvider(fontProvider);
             HtmlConverter.convertToPdf(content, new FileOutputStream(outPath), converterProperties);
         } catch (Exception e) {
-            System.out.println("生成模板内容失败,{}"+e);
+            System.out.println("生成模板内容失败,{}" + e);
             return false;
         }
         return true;
     }
+
+
     /**
      * HTML 转 PDF
+     *
      * @param content html内容
      * @return PDF字节数组
      */
@@ -70,9 +92,12 @@ public class PdfUtil {
         try {
             ConverterProperties converterProperties = new ConverterProperties();
             converterProperties.setCharset("UTF-8");
-            FontProvider fontProvider = new FontProvider();
-            fontProvider.addSystemFonts();
+            FontProvider fontProvider = new DefaultFontProvider(true, true, false);
+            PdfFont simsun = PdfFontFactory.createFont(FontProgramFactory.createFont("simsun.ttc", 1, false));
+            fontProvider.addFont(simsun.getFontProgram());
+//            System.out.println(fontProvider.getFontSet().getFonts().stream().map(l -> l.getFontName()).collect(Collectors.joining(",")));
             converterProperties.setFontProvider(fontProvider);
+
             //设置pdf纸张
             PdfWriter writer = new PdfWriter(outputStream);
             PdfDocument pdf = new PdfDocument(writer);
@@ -80,9 +105,9 @@ public class PdfUtil {
             //设置纸张的大小,并且设置默认的pdf大小
             PageSize pageSize = PageSize.A3.rotate();
             pdf.setDefaultPageSize(pageSize);
-            HtmlConverter.convertToPdf(content,pdf,converterProperties);
+            HtmlConverter.convertToPdf(content, pdf, converterProperties);
         } catch (Exception e) {
-            System.out.print("生成 PDF 失败,{}"+e);
+            System.out.print("生成 PDF 失败,{}" + e);
         }
         return outputStream.toByteArray();
     }

+ 6 - 2
src/main/java/cn/ezhizao/project/business/housingFund/controller/BizHousingFundConfirmController.java

@@ -33,6 +33,7 @@ import org.apache.poi.ss.usermodel.Font;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
@@ -78,6 +79,9 @@ public class BizHousingFundConfirmController extends BaseController {
     @Resource
     private SysUserMapper sysUserMapper;
 
+    @Value("${ruoyi.pdfTemplate.url}")
+    private String templatePath;
+
     /**
      * 生成pdf
      */
@@ -564,8 +568,8 @@ public class BizHousingFundConfirmController extends BaseController {
         response.setCharacterEncoding("UTF-8");
         response.setContentType("application/pdf");
         String fileName ="工资表";
-        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes(), "iso8859-1"));
-
+//        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes(), "iso8859-1"));
+        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes()));
         byte[] resources = PdfUtil.html2Pdf(templateContent);
         ServletOutputStream outputStream = response.getOutputStream();
         outputStream.write(resources);

+ 14 - 2
src/main/java/cn/ezhizao/project/business/salary/controller/BizFinancialSalaryController.java

@@ -1,5 +1,6 @@
 package cn.ezhizao.project.business.salary.controller;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
@@ -39,6 +40,9 @@ import cn.ezhizao.project.system.mapper.SysUserMapper;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.poi.excel.ExcelWriter;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import freemarker.cache.FileTemplateLoader;
+import freemarker.cache.TemplateLoader;
+import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
 import io.swagger.annotations.ApiOperation;
@@ -47,6 +51,7 @@ import org.apache.poi.ss.usermodel.Font;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
@@ -89,6 +94,8 @@ public class BizFinancialSalaryController extends BaseController {
     @Resource
     private IBizCompanyService companyService;
 
+    @Value("${ruoyi.pdfTemplate.url}")
+    private String templatePath;
     /**
      * 生成pdf
      */
@@ -603,6 +610,11 @@ public class BizFinancialSalaryController extends BaseController {
         Writer out = new StringWriter();
         //获取模板地址
         Template template = freeMarkerConfigurer.getConfiguration().getTemplate("salaryTemplate.html");
+
+//        TemplateLoader templateLoader = new FileTemplateLoader(new File(templatePath));
+//        Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
+//        configuration.setTemplateLoader(templateLoader);
+//        Template template = configuration.getTemplate("salaryTemplate.html", "UTF-8");
         template.process(paramMap, out);
         out.flush();
         out.close();
@@ -611,8 +623,8 @@ public class BizFinancialSalaryController extends BaseController {
         response.setContentType("application/pdf");
 
         String fileName ="工资表";
-        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes(), "iso8859-1"));
-
+//        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes(), "iso8859-1"));
+        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes()));
         byte[] resources = PdfUtil.html2Pdf(templateContent);
         ServletOutputStream outputStream = response.getOutputStream();
         outputStream.write(resources);

+ 9 - 2
src/main/java/cn/ezhizao/project/business/socialSecurity/controller/SocialSecurityConfirmController.java

@@ -24,6 +24,7 @@ import cn.ezhizao.project.system.mapper.SysUserMapper;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.poi.excel.ExcelWriter;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.itextpdf.text.FontFactory;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
 import io.swagger.annotations.Api;
@@ -33,11 +34,13 @@ import org.apache.poi.ss.usermodel.Font;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
+import org.xhtmlrenderer.pdf.ITextRenderer;
 
 import javax.annotation.Resource;
 import javax.servlet.ServletOutputStream;
@@ -49,6 +52,7 @@ import java.io.Writer;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -73,6 +77,9 @@ public class SocialSecurityConfirmController extends BaseController {
     @Resource
     SysUserMapper sysUserMapper;
 
+    @Value("${ruoyi.pdfTemplate.url}")
+    private String templatePath;
+
     /**
      * 生成pdf
      */
@@ -608,8 +615,8 @@ public class SocialSecurityConfirmController extends BaseController {
         response.setCharacterEncoding("UTF-8");
         response.setContentType("application/pdf");
         String fileName ="工资表";
-        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes(), "iso8859-1"));
-
+//        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes(), StandardCharsets.ISO_8859_1));
+        response.setHeader("Content-Disposition", "filename=" + new String(fileName.getBytes()));
         byte[] resources = PdfUtil.html2Pdf(templateContent);
         ServletOutputStream outputStream = response.getOutputStream();
         outputStream.write(resources);

+ 1 - 3
src/main/resources/mybatis/business/BizHousingFundDeclareDetailMapper.xml

@@ -7,7 +7,6 @@
         <result column="id" jdbcType="BIGINT" property="id"/>
         <collection property="evidenceFiles" ofType="cn.ezhizao.project.system.domain.SysFileStorage" select="getFiles"
                     column="id"/>
-
     </resultMap>
 
     <resultMap type="cn.ezhizao.project.system.domain.SysFileStorage" id="FileStorageResult">
@@ -17,10 +16,9 @@
     <select id="getFiles" resultMap="FileStorageResult">
         select s.*
         from sys_file_storage s
-        where s.deleted = 1
+        where s.deleted = 0
           and s.master_table_name = 'biz_housing_fund_declare_detail'
           and s.master_id = #{id}
-
     </select>
 
 

+ 3 - 1
src/main/resources/templates/housingFundTemplate.html

@@ -3,13 +3,15 @@
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <!-- font-family: Microsoft YaHei, sans-serif; -->
     <style>        @page {
         size: A4 portrait;
         margin: 15px;
     }
     body {
         margin: 0;
-        font-family:"宋体", sans-serif;
+        font-family: Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif;
+
     }
     table {
         width: 100%;

+ 2 - 1
src/main/resources/templates/salaryTemplate.html

@@ -3,13 +3,14 @@
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <!-- font-family: Microsoft YaHei, sans-serif; -->
     <style>        @page {
         size: A4 portrait;
         margin: 15px;
     }
     body {
         margin: 0;
-        font-family: "宋体", sans-serif;
+        font-family: Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif;
     }
     table {
         width: 100%;

+ 3 - 1
src/main/resources/templates/socialSecurityTemplate.html

@@ -3,13 +3,15 @@
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <!-- font-family: Microsoft YaHei, sans-serif; -->
     <style>        @page {
         size: A4 portrait;
         margin: 15px;
     }
+
     body {
         margin: 0;
-        font-family: "宋体", sans-serif;
+        font-family: Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif;
     }
     table {
         width: 100%;