diff --git a/.idea/libraries/Maven__com_lowagie_itext_2_1_7.xml b/.idea/libraries/Maven__com_lowagie_itext_2_1_7.xml new file mode 100644 index 000000000..ae673ea65 --- /dev/null +++ b/.idea/libraries/Maven__com_lowagie_itext_2_1_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_poi_xwpf_converter_core_2_0_2.xml b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_poi_xwpf_converter_core_2_0_2.xml new file mode 100644 index 000000000..df21c44d2 --- /dev/null +++ b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_poi_xwpf_converter_core_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_poi_xwpf_converter_pdf_2_0_2.xml b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_poi_xwpf_converter_pdf_2_0_2.xml new file mode 100644 index 000000000..6683dce85 --- /dev/null +++ b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_poi_xwpf_converter_pdf_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_poi_xwpf_converter_xhtml_2_0_2.xml b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_poi_xwpf_converter_xhtml_2_0_2.xml new file mode 100644 index 000000000..6fc98a269 --- /dev/null +++ b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_poi_xwpf_converter_xhtml_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_converter_2_0_2.xml b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_converter_2_0_2.xml new file mode 100644 index 000000000..6fea8034f --- /dev/null +++ b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_converter_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_converter_docx_xwpf_2_0_2.xml b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_converter_docx_xwpf_2_0_2.xml new file mode 100644 index 000000000..56c5ada6b --- /dev/null +++ b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_converter_docx_xwpf_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_core_2_0_2.xml b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_core_2_0_2.xml new file mode 100644 index 000000000..0c1dfdbbb --- /dev/null +++ b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_core_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_itext_extension_2_0_2.xml b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_itext_extension_2_0_2.xml new file mode 100644 index 000000000..a99409b04 --- /dev/null +++ b/.idea/libraries/Maven__fr_opensagres_xdocreport_fr_opensagres_xdocreport_itext_extension_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__fr_opensagres_xdocreport_xdocreport_2_0_2.xml b/.idea/libraries/Maven__fr_opensagres_xdocreport_xdocreport_2_0_2.xml new file mode 100644 index 000000000..37428aa99 --- /dev/null +++ b/.idea/libraries/Maven__fr_opensagres_xdocreport_xdocreport_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_poi_ooxml_schemas_1_4.xml b/.idea/libraries/Maven__org_apache_poi_ooxml_schemas_1_4.xml new file mode 100644 index 000000000..aca2261d6 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_poi_ooxml_schemas_1_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/emis-biz-web/emis-biz-web.iml b/emis-biz-web/emis-biz-web.iml index 2b4f5d82d..dd71cc2b7 100644 --- a/emis-biz-web/emis-biz-web.iml +++ b/emis-biz-web/emis-biz-web.iml @@ -296,5 +296,24 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/emis-biz/emis-biz.iml b/emis-biz/emis-biz.iml index 4e9707fa2..bdb0c2751 100644 --- a/emis-biz/emis-biz.iml +++ b/emis-biz/emis-biz.iml @@ -255,5 +255,24 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/emis-biz/lib/aspose-words-15.8.0-jdk16.jar b/emis-biz/lib/aspose-words-15.8.0-jdk16.jar new file mode 100644 index 000000000..c0e699fc5 Binary files /dev/null and b/emis-biz/lib/aspose-words-15.8.0-jdk16.jar differ diff --git a/emis-biz/pom.xml b/emis-biz/pom.xml index edd4db03c..1c41e5009 100644 --- a/emis-biz/pom.xml +++ b/emis-biz/pom.xml @@ -65,6 +65,12 @@ org.apache.pdfbox pdfbox 2.0.9 + + + fontbox + org.apache.pdfbox + + org.apache.pdfbox @@ -127,7 +133,69 @@ 1.10.6 - + + + + + + + + + + + + + + + + + + + + + fr.opensagres.xdocreport + xdocreport + 2.0.2 + + + + fr.opensagres.xdocreport + fr.opensagres.xdocreport.converter.docx.xwpf + 2.0.2 + + + + + + + + + + + + com.aspose + aspose-words + 15.8.0 + system + ${project.basedir}/lib/aspose-words-15.8.0-jdk16.jar + + + + + + + + + + + + + + + + + + diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java index cf3dcfff5..973bb0c16 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java @@ -11,9 +11,7 @@ package com.xdadan.erp.emis.service.impl; import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.math.BigDecimal; import java.net.URLEncoder; import java.text.DecimalFormat; @@ -45,6 +43,7 @@ import com.xdadan.erp.emis.domain.vo.*; import com.xdadan.erp.emis.domain.vo.scan.ScanInfo; import com.xdadan.erp.emis.mapper.*; import com.xdadan.erp.emis.service.*; +import com.xdadan.erp.emis.service.warehouse.DocUtils; import com.xdadan.erp.emis.utils.WaybillHelper; import com.xdadan.erp.emis.utils.sensitive.Convert; import com.xdadan.erp.system.service.ISysUserService; @@ -2272,10 +2271,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb queryCargo.setWaybillId(emisWaybillOld.getId()); List cargoList=emisWaybillCargoMapper.selectEmisWaybillCargoList(queryCargo); - // 生成条码 int width=400; - int height=80; + int height=70; BufferedImage barcodeImageBuffer = BarcodeUtils.getBarCodeWithWord(emisWaybillOld.getIntoWarehouseBillCode(),width,height,100); // 填充模版数据 @@ -2333,9 +2331,15 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb XWPFTemplate template = XWPFTemplate.compile(fis,config).render(fillMap); response.setContentType("application/octet-stream"); - response.setHeader("Content-Disposition", "attachment;fileName="+ fileName +".docx"); + response.setHeader("Content-Disposition", "attachment;fileName="+ fileName +".pdf"); + + ByteArrayOutputStream bos=new ByteArrayOutputStream(); + template.write(bos); + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + + DocUtils.wordToPdf(bis, outputStream); response.flushBuffer(); - template.write(response.getOutputStream()); + IOUtils.closeQuietly(fis); IOUtils.closeQuietly(outputStream); diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/warehouse/DocUtils.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/warehouse/DocUtils.java new file mode 100644 index 000000000..c241e5b00 --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/warehouse/DocUtils.java @@ -0,0 +1,187 @@ +package com.xdadan.erp.emis.service.warehouse; + + +import com.aspose.words.*; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.data.PictureType; +import com.deepoove.poi.data.Pictures; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; +import com.xdadan.erp.common.core.pay.vitepay.sdk.Config; +import com.xdadan.erp.common.utils.BarcodeUtils; +import com.xdadan.erp.common.utils.StringUtils; +import com.xdadan.erp.emis.domain.vo.Cargo; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.awt.image.BufferedImage; +import java.io.*; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@Slf4j +public class DocUtils { + + // 字体目录 + public static String FONT_PATH=""; + + @Value("${system.fontPath}") + public void setFontPath(String fontPath) { + DocUtils.FONT_PATH = fontPath; + } + + /** + * 填充数据 + * @param input 输入word文件数据流 + * @param data 需要替换的数据映射 + * @param output 输出的word文件数据量 + * @throws IOException + */ + public static void fillData(InputStream input, Map data, OutputStream output) throws IOException { + //使用poi-tl.jar中的类填充数据 + try(XWPFTemplate template = XWPFTemplate.compile(input) ){ + template.render(data).writeAndClose(output); + }catch (Exception ex){ + throw ex; + } + } + + // 查看缺少的字体 + private static class FontSubstitutionWarningCollector implements IWarningCallback { + public void warning(WarningInfo info) { + if (info.getWarningType() == WarningType.FONT_SUBSTITUTION) { + log.error("==>font miss==>{}", info.getDescription()); + } + } + } + + /** + * word转换为pdf + * @param wordInput word文件输入流 + * @param pdfOutput pdf文件输出流 + * @throws Exception + */ + public static void wordToPdf(InputStream wordInput, OutputStream pdfOutput) throws Exception { + getLicense(); + //通过aspose-words.jar中的类转换文件 + Document wordDoc = new Document(wordInput); + FontSubstitutionWarningCollector callback = new FontSubstitutionWarningCollector(); + wordDoc.setWarningCallback(callback); + if(!StringUtils.isEmpty(DocUtils.FONT_PATH)) { + FontSettings.setFontsFolder(DocUtils.FONT_PATH, false); + } + PdfSaveOptions pso = new PdfSaveOptions(); + wordDoc.save(pdfOutput, pso); + } + + @SneakyThrows + private static void getLicense() { + try (InputStream is = DocUtils.class.getClassLoader().getResourceAsStream("License.xml")) { + License license = new License(); + license.setLicense(is); + } + } + + public static void genPdfByDocxTpl(InputStream tplStream,Map fillDataMap,OutputStream os) throws Exception { + ByteArrayOutputStream bos=new ByteArrayOutputStream(); + fillData(tplStream,fillDataMap,bos); + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + wordToPdf(bis, os); + } + + public static void test() { + + try { + int width=400; + int height=80; + + BufferedImage barcodeImageBuffer = BarcodeUtils.getBarCodeWithWord("TAN-SHJD-24072701",width,height,100); + + List cargoList= new ArrayList<>(); + + Cargo cargo=new Cargo(); + cargo.setGoodsName("测试"); + cargo.setCargoQty(1); + cargo.setWeight(BigDecimal.valueOf(1.2D)); + cargo.setWeight(BigDecimal.valueOf(1.2D)); + cargo.setLength(BigDecimal.valueOf(1.2D)); + cargo.setWidth(BigDecimal.valueOf(1.2D)); + cargo.setHeight(BigDecimal.valueOf(1.2D)); + cargoList.add(cargo); + + + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + + Configure config = Configure.builder() + .bind("cargoList", policy).build(); + + + + XWPFTemplate template = XWPFTemplate.compile("/Users/alan/Downloads/ws_ls_in_tpl.docx",config).render( + new HashMap(){{ + put("wsInNo", "TAN-SHJD-24072701"); + put("country", "越南"); + put("warehouse", "柯桥"); + put("productName", "探路特快"); + put("estDate", "2024-07-22"); + put("declareType", "快递报关"); + put("eDeclareType", "快递清关"); + + put("supplier", "供应商"); + + put("sendName", "发件人"); + put("sendTel", "发件电话"); + put("sendAddress", "发件地址"); + put("sendCompany", "发件公司"); + + put("recvName", "收件人"); + put("recvTel", "收件电话"); + put("recvAddress", "收件地址"); + put("recvCompany", "收件公司"); + + put("wsContact", "易大伟"); + put("wsPhone", "123"); + put("wsAddress", "南京机场"); + put("payee", "李晓虎"); + + put("barcode", Pictures.ofBufferedImage(barcodeImageBuffer, PictureType.JPEG) + .size(width, height).create()); + + put("cargoList", cargoList); + }}); + + + + template.writeAndClose(new FileOutputStream("/Users/alan/Downloads/1.docx")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + try { + FileInputStream tpl = new FileInputStream("/Users/alan/Downloads/ws_air_in_tpl.docx"); + FileOutputStream os = new FileOutputStream("/Users/alan/Downloads/x1.pdf"); +// wordToPdf(inputStream1, os); + Map fillDataMap=new HashMap(); + fillDataMap.put("wsInNo", "TAN-SHJD-24072702221"); + fillDataMap.put("country", "越南"); + fillDataMap.put("warehouse", "柯桥"); + fillDataMap.put("productName", "探路特快"); + fillDataMap.put("estDate", "2024-07-22"); + fillDataMap.put("declareType", "快递报关"); + fillDataMap.put("eDeclareType", "快递清关"); + genPdfByDocxTpl(tpl,fillDataMap,os); + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/warehouse/DocXdocUtils.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/warehouse/DocXdocUtils.java new file mode 100644 index 000000000..a82125ec4 --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/warehouse/DocXdocUtils.java @@ -0,0 +1,99 @@ +package com.xdadan.erp.emis.service.warehouse; + + +import com.aspose.words.*; +import com.deepoove.poi.XWPFTemplate; +import com.lowagie.text.Font; +import com.lowagie.text.pdf.BaseFont; +import fr.opensagres.poi.xwpf.converter.pdf.PdfConverter; +import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions; +import fr.opensagres.xdocreport.itext.extension.font.IFontProvider; +import fr.opensagres.xdocreport.itext.extension.font.ITextFontRegistry; +import lombok.SneakyThrows; +import org.apache.poi.xwpf.usermodel.XWPFDocument; + +import java.awt.*; +import java.io.*; +import java.util.Map; + +public class DocXdocUtils { + /** + * 填充数据 + * @param input 输入word文件数据流 + * @param data 需要替换的数据映射 + * @param output 输出的word文件数据量 + * @throws IOException + */ + public static void fillData(InputStream input, Map data, OutputStream output) throws IOException { + //使用poi-tl.jar中的类填充数据 + try(XWPFTemplate template = XWPFTemplate.compile(input) ){ + template.render(data).writeAndClose(output); + }catch (Exception ex){ + throw ex; + } + } + + + private static PdfOptions getPdfOptions() { + PdfOptions pdfOptions = PdfOptions.create(); + + pdfOptions.fontProvider(new IFontProvider() { + public Font getFont(String familyName, String encoding, float size, int style, Color color) { + try { + + BaseFont bfSimfang = BaseFont.createFont("/font/simfang.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); + BaseFont bfSimSun = BaseFont.createFont("/font/simsun.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); + BaseFont bfSimHei = BaseFont.createFont("/font/simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); + + Font fontSimfang = new Font(bfSimfang, size, style, color); + fontSimfang.setFamily("仿宋"); + + Font fontSimSun = new Font(bfSimSun, size, style, color); + fontSimSun.setFamily("宋体"); + + Font fontSimHei = new Font(bfSimHei, size, style, color); + fontSimHei.setFamily("黑体"); + + System.out.println("===>familyName==>"+familyName); + if ("仿宋".equals(familyName)) { + return fontSimfang; + } + else if ("宋体".equals(familyName)) { + return fontSimSun; + } + else if ("黑体".equals(familyName)) { + return fontSimHei; + } + + return fontSimSun; + } catch (Throwable e) { + e.printStackTrace(); + // An error occurs, use the default font provider. + return ITextFontRegistry.getRegistry().getFont(familyName, encoding, size, style, color); + } + } + }); + return pdfOptions; + } + + public static void convertToPdf(String wordFile, String pdfFile) throws IOException { + try (InputStream in = new FileInputStream(wordFile); + OutputStream out = new FileOutputStream(pdfFile)) { + PdfOptions options = getPdfOptions(); + XWPFDocument document = new XWPFDocument(in); + PdfConverter.getInstance().convert(document, out, options); + } + } + + public static void main(String[] args) { + try { + + String srcFile="/Users/alan/Downloads/1.docx"; + String destFile="/Users/alan/Downloads/6.pdf"; + convertToPdf(srcFile,destFile); + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/warehouse/WordTplUtils.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/warehouse/WordTplUtils.java deleted file mode 100644 index f702bd125..000000000 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/warehouse/WordTplUtils.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.xdadan.erp.emis.service.warehouse; - -import com.deepoove.poi.XWPFTemplate; -import com.deepoove.poi.config.Configure; -import com.deepoove.poi.data.Numberings; -import com.deepoove.poi.data.PictureType; -import com.deepoove.poi.data.Pictures; -import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; -import com.xdadan.erp.common.utils.BarcodeUtils; -import com.xdadan.erp.emis.domain.EmisWaybill; -import com.xdadan.erp.emis.domain.vo.Cargo; -import org.apache.http.HttpResponse; -import org.springframework.core.io.ClassPathResource; - -import java.awt.image.BufferedImage; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.math.BigDecimal; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class WordTplUtils { - - public void genWord(OutputStream out, EmisWaybill waybill) throws IOException { - -// XWPFTemplate template = XWPFTemplate.compile(tplFile); -// // 数据填充 -// template.render(fillMap); -// template.write(out); -// out.flush(); - - try { - int width=350; - int height=40; - - BufferedImage barcodeImageBuffer = BarcodeUtils.getBarCodeWithWord("TAN-SHJD-24072701",width,height,70); - - List cargoList= new ArrayList<>(); - - Cargo cargo=new Cargo(); - cargo.setGoodsName("测试"); - cargo.setCargoQty(1); - cargo.setWeight(BigDecimal.valueOf(1.2D)); - cargo.setWeight(BigDecimal.valueOf(1.2D)); - cargo.setLength(BigDecimal.valueOf(1.2D)); - cargo.setWidth(BigDecimal.valueOf(1.2D)); - cargo.setHeight(BigDecimal.valueOf(1.2D)); - cargoList.add(cargo); - - - LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); - - Configure config = Configure.builder() - .bind("cargoList", policy).build(); - - - InputStream fis = new ClassPathResource("tpl/ws_in_tpl.docx").getInputStream(); - XWPFTemplate template = XWPFTemplate.compile("/Users/alan/Downloads/ws_air_in_tpl.docx",config).render( - new HashMap(){{ - put("wsInNo", "TAN-SHJD-24072701"); - put("country", "越南"); - put("warehouse", "柯桥"); - put("productName", "探路特快"); - put("estDate", "2024-07-22"); - put("declareType", "快递报关"); - put("eDeclareType", "快递清关"); - - put("supplier", "供应商"); - - put("sendName", "发件人"); - put("sendTel", "发件电话"); - put("sendAddress", "发件地址"); - put("sendCompany", "发件公司"); - - put("recvName", "收件人"); - put("recvTel", "收件电话"); - put("recvAddress", "收件地址"); - put("recvCompany", "收件公司"); - - put("wsContact", "易大伟"); - put("wsPhone", "123"); - put("wsAddress", "南京机场"); - put("payee", "李晓虎"); - - put("barcode", Pictures.ofBufferedImage(barcodeImageBuffer, PictureType.JPEG) - .size(width, height).create()); - - put("cargoList", cargoList); - }}); - - - - template.writeAndClose(new FileOutputStream("/Users/alan/Downloads/1.docx")); - } catch (IOException e) { - e.printStackTrace(); - } - - - } - - public static void main(String[] args) { - - try { - int width=400; - int height=80; - - BufferedImage barcodeImageBuffer = BarcodeUtils.getBarCodeWithWord("TAN-SHJD-24072701",width,height,100); - - List cargoList= new ArrayList<>(); - - Cargo cargo=new Cargo(); - cargo.setGoodsName("测试"); - cargo.setCargoQty(1); - cargo.setWeight(BigDecimal.valueOf(1.2D)); - cargo.setWeight(BigDecimal.valueOf(1.2D)); - cargo.setLength(BigDecimal.valueOf(1.2D)); - cargo.setWidth(BigDecimal.valueOf(1.2D)); - cargo.setHeight(BigDecimal.valueOf(1.2D)); - cargoList.add(cargo); - - - LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); - - Configure config = Configure.builder() - .bind("cargoList", policy).build(); - - - - XWPFTemplate template = XWPFTemplate.compile("/Users/alan/Downloads/ws_ls_in_tpl.docx",config).render( - new HashMap(){{ - put("wsInNo", "TAN-SHJD-24072701"); - put("country", "越南"); - put("warehouse", "柯桥"); - put("productName", "探路特快"); - put("estDate", "2024-07-22"); - put("declareType", "快递报关"); - put("eDeclareType", "快递清关"); - - put("supplier", "供应商"); - - put("sendName", "发件人"); - put("sendTel", "发件电话"); - put("sendAddress", "发件地址"); - put("sendCompany", "发件公司"); - - put("recvName", "收件人"); - put("recvTel", "收件电话"); - put("recvAddress", "收件地址"); - put("recvCompany", "收件公司"); - - put("wsContact", "易大伟"); - put("wsPhone", "123"); - put("wsAddress", "南京机场"); - put("payee", "李晓虎"); - - put("barcode", Pictures.ofBufferedImage(barcodeImageBuffer, PictureType.JPEG) - .size(width, height).create()); - - put("cargoList", cargoList); - }}); - - - - template.writeAndClose(new FileOutputStream("/Users/alan/Downloads/1.docx")); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/emis-biz/src/main/resources/License.xml b/emis-biz/src/main/resources/License.xml new file mode 100644 index 000000000..2cbce4555 --- /dev/null +++ b/emis-biz/src/main/resources/License.xml @@ -0,0 +1,15 @@ + + + + Aspose.Total for Java + Aspose.Words for Java + + Enterprise + 20991231 + 20991231 + 8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7 + + + sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU= + + diff --git a/emis-biz/src/main/resources/font/simfang.ttf b/emis-biz/src/main/resources/font/simfang.ttf new file mode 100644 index 000000000..2b59eae41 Binary files /dev/null and b/emis-biz/src/main/resources/font/simfang.ttf differ