|
@@ -1,23 +1,26 @@
|
|
|
package com.qunzhixinxi.hnqz.common.core.util;
|
|
|
|
|
|
-import cn.hutool.core.date.DatePattern;
|
|
|
+import com.itextpdf.text.BaseColor;
|
|
|
import com.itextpdf.text.Document;
|
|
|
+import com.itextpdf.text.Element;
|
|
|
+import com.itextpdf.text.Font;
|
|
|
import com.itextpdf.text.PageSize;
|
|
|
+import com.itextpdf.text.Paragraph;
|
|
|
+import com.itextpdf.text.Rectangle;
|
|
|
import com.itextpdf.text.pdf.AcroFields;
|
|
|
import com.itextpdf.text.pdf.BaseFont;
|
|
|
import com.itextpdf.text.pdf.PdfCopy;
|
|
|
import com.itextpdf.text.pdf.PdfImportedPage;
|
|
|
+import com.itextpdf.text.pdf.PdfPCell;
|
|
|
+import com.itextpdf.text.pdf.PdfPTable;
|
|
|
import com.itextpdf.text.pdf.PdfReader;
|
|
|
import com.itextpdf.text.pdf.PdfStamper;
|
|
|
+import com.itextpdf.text.pdf.PdfWriter;
|
|
|
import lombok.experimental.UtilityClass;
|
|
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
import java.io.FileOutputStream;
|
|
|
-import java.time.LocalDate;
|
|
|
-import java.time.format.DateTimeFormatter;
|
|
|
-import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
-import java.util.UUID;
|
|
|
|
|
|
/**
|
|
|
* pdf工具
|
|
@@ -75,48 +78,138 @@ public final class PdfUtils {
|
|
|
}
|
|
|
|
|
|
|
|
|
- public static void main(String[] args) {
|
|
|
+ public static void generateSupervisionReport(String targetPath, Rectangle pageSize, boolean rotate, String f, Object[][] datas) {
|
|
|
+ FileOutputStream fos;
|
|
|
+ PdfWriter writer;
|
|
|
+ Font font;
|
|
|
|
|
|
- String templatePath = "/Users/jimmy/pkg_temp_v19_1.pdf";
|
|
|
- String outFilePath = "/Users/jimmy/Desktop/" + UUID.randomUUID() + ".pdf";
|
|
|
- Map<String, String> params = new HashMap<>();
|
|
|
- params.put("party_a_name", "中国生物水痘生产企业");
|
|
|
- params.put("party_a_address", "北京市朝阳区双桥路123号中国生物基地10-12号");
|
|
|
- params.put("party_a_resp_name", "张三");
|
|
|
- params.put("party_a_contact_name", "买还买提~阿卜杜拉~买买提");
|
|
|
- params.put("party_a_contact_phone", "13388889999");
|
|
|
+ int numberColumns = 12;
|
|
|
|
|
|
- params.put("party_b_name", "长春生物药品科技有限公司");
|
|
|
- params.put("party_b_address", "吉林省长春市光驱路123号生物医药基地123楼");
|
|
|
- params.put("party_b_resp_name", "里斯");
|
|
|
- params.put("party_b_contact_name", "王五");
|
|
|
- params.put("party_b_contact_phone", "18877778888");
|
|
|
-
|
|
|
- params.put("issue_date", DateTimeFormatter.ofPattern(DatePattern.CHINESE_DATE_PATTERN).format(LocalDate.of(2024, 1, 1)));
|
|
|
- params.put("expiry_date", DateTimeFormatter.ofPattern(DatePattern.CHINESE_DATE_PATTERN).format(LocalDate.of(2024, 3, 31)));
|
|
|
+ if (pageSize == null) {
|
|
|
+ pageSize = PageSize.A4;
|
|
|
+ }
|
|
|
|
|
|
- params.put("s1_name", "市场信息手机");
|
|
|
- params.put("s1_qty", "1");
|
|
|
- params.put("s1_price", "3000");
|
|
|
- params.put("s1_rate", "19%");
|
|
|
|
|
|
- params.put("s2_name", "会议举办");
|
|
|
- params.put("s2_qty", "1000");
|
|
|
- params.put("s2_price", "30000");
|
|
|
- params.put("s2_rate", "100%");
|
|
|
+ try {
|
|
|
+ fos = new FileOutputStream(targetPath);
|
|
|
+
|
|
|
+ Rectangle rectangle = rotate ? new Rectangle(pageSize).rotate() : new Rectangle(pageSize);
|
|
|
+
|
|
|
+ Document document = new Document(rectangle);
|
|
|
+ writer = PdfWriter.getInstance(document, fos);
|
|
|
+ writer.setViewerPreferences(PdfWriter.PageModeUseThumbs);
|
|
|
+ document.open();
|
|
|
+
|
|
|
+ PdfPTable table = new PdfPTable(numberColumns);
|
|
|
+ table.setLockedWidth(true);
|
|
|
+ table.setTotalWidth(780);
|
|
|
+ table.setHorizontalAlignment(Element.ALIGN_LEFT);
|
|
|
+
|
|
|
+ // 设置单元格文本字体样式
|
|
|
+ font = getPdfChineseFont(f);
|
|
|
+
|
|
|
+ for (int i = 0; i < datas.length; i++) {
|
|
|
+ for (int j = 0; j < datas[i].length; j++) {
|
|
|
+ PdfPCell pdfCell = new PdfPCell();
|
|
|
+ pdfCell.setMinimumHeight(30);
|
|
|
+
|
|
|
+ // 设置单元格样式
|
|
|
+ pdfCell.setHorizontalAlignment(Element.ALIGN_CENTER);
|
|
|
+ pdfCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
|
|
|
+
|
|
|
+
|
|
|
+ // 设置表头背景色
|
|
|
+ if (i <= 1 && j <= numberColumns) {
|
|
|
+ pdfCell.setBackgroundColor(BaseColor.GRAY);
|
|
|
+ }
|
|
|
+
|
|
|
+ pdfCell.setBorder(1);
|
|
|
+ pdfCell.setBorderWidthTop(0.1f);
|
|
|
+ pdfCell.setBorderWidthBottom(0.1f);
|
|
|
+ pdfCell.setBorderWidthLeft(0.1f);
|
|
|
+ pdfCell.setBorderWidthRight(0.1f);
|
|
|
+ pdfCell.setBorderColorBottom(BaseColor.BLACK);
|
|
|
+ pdfCell.setBorderColorLeft(BaseColor.BLACK);
|
|
|
+ pdfCell.setBorderColorRight(BaseColor.BLACK);
|
|
|
+ pdfCell.setBorderColorTop(BaseColor.BLACK);
|
|
|
+
|
|
|
+ // // 设置单元格文本字体样式
|
|
|
+ // Font font = getPdfChineseFont(font);
|
|
|
+
|
|
|
+ // 合并单元格
|
|
|
+ if (i == 0 && j == 0) {
|
|
|
+ pdfCell.setRowspan(1);
|
|
|
+ pdfCell.setColspan(numberColumns);
|
|
|
+ }
|
|
|
+
|
|
|
+ Paragraph paragraph = new Paragraph(String.valueOf(datas[i][j]), font);
|
|
|
+ pdfCell.setPhrase(paragraph);
|
|
|
+
|
|
|
+ table.addCell(pdfCell);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- params.put("s3_name", "会议举办");
|
|
|
- params.put("s3_qty", "1000");
|
|
|
- params.put("s3_price", "30000");
|
|
|
- params.put("s3_rate", "100%");
|
|
|
+ document.add(table);
|
|
|
+ document.close();
|
|
|
|
|
|
- params.put("s4_name", "会议举办");
|
|
|
- params.put("s4_qty", "1000");
|
|
|
- params.put("s4_price", "30000");
|
|
|
- params.put("s4_rate", "100%");
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ public static Font getPdfChineseFont(String font) throws Exception {
|
|
|
+ // BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H",
|
|
|
+ // BaseFont.NOT_EMBEDDED);
|
|
|
+ BaseFont bfChinese = BaseFont.createFont(font + ",0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
|
|
|
+ Font fontChinese = new Font(bfChinese, 6, Font.NORMAL);
|
|
|
+ return fontChinese;
|
|
|
+ }
|
|
|
|
|
|
- params.put("sign_date", DateTimeFormatter.ofPattern(DatePattern.CHINESE_DATE_PATTERN).format(LocalDate.now()));
|
|
|
- resumeGenerate(templatePath, outFilePath, "/Users/jimmy/Desktop/SimSun.ttc", params);
|
|
|
+ public static void main(String[] args) throws Exception {
|
|
|
+
|
|
|
+ // String targetPath = "/Users/jimmy/table8.pdf";
|
|
|
+ // generateSupervisionReport(targetPath, PageSize.A4, true);
|
|
|
+
|
|
|
+ // String templatePath = "/Users/jimmy/pkg_temp_v19_1.pdf";
|
|
|
+ // String outFilePath = "/Users/jimmy/Desktop/" + UUID.randomUUID() + ".pdf";
|
|
|
+ // Map<String, String> params = new HashMap<>();
|
|
|
+ // params.put("party_a_name", "中国生物水痘生产企业");
|
|
|
+ // params.put("party_a_address", "北京市朝阳区双桥路123号中国生物基地10-12号");
|
|
|
+ // params.put("party_a_resp_name", "张三");
|
|
|
+ // params.put("party_a_contact_name", "买还买提~阿卜杜拉~买买提");
|
|
|
+ // params.put("party_a_contact_phone", "13388889999");
|
|
|
+ //
|
|
|
+ // params.put("party_b_name", "长春生物药品科技有限公司");
|
|
|
+ // params.put("party_b_address", "吉林省长春市光驱路123号生物医药基地123楼");
|
|
|
+ // params.put("party_b_resp_name", "里斯");
|
|
|
+ // params.put("party_b_contact_name", "王五");
|
|
|
+ // params.put("party_b_contact_phone", "18877778888");
|
|
|
+ //
|
|
|
+ // params.put("issue_date", DateTimeFormatter.ofPattern(DatePattern.CHINESE_DATE_PATTERN).format(LocalDate.of(2024, 1, 1)));
|
|
|
+ // params.put("expiry_date", DateTimeFormatter.ofPattern(DatePattern.CHINESE_DATE_PATTERN).format(LocalDate.of(2024, 3, 31)));
|
|
|
+ //
|
|
|
+ // params.put("s1_name", "市场信息手机");
|
|
|
+ // params.put("s1_qty", "1");
|
|
|
+ // params.put("s1_price", "3000");
|
|
|
+ // params.put("s1_rate", "19%");
|
|
|
+ //
|
|
|
+ // params.put("s2_name", "会议举办");
|
|
|
+ // params.put("s2_qty", "1000");
|
|
|
+ // params.put("s2_price", "30000");
|
|
|
+ // params.put("s2_rate", "100%");
|
|
|
+ //
|
|
|
+ // params.put("s3_name", "会议举办");
|
|
|
+ // params.put("s3_qty", "1000");
|
|
|
+ // params.put("s3_price", "30000");
|
|
|
+ // params.put("s3_rate", "100%");
|
|
|
+ //
|
|
|
+ // params.put("s4_name", "会议举办");
|
|
|
+ // params.put("s4_qty", "1000");
|
|
|
+ // params.put("s4_price", "30000");
|
|
|
+ // params.put("s4_rate", "100%");
|
|
|
+ //
|
|
|
+ //
|
|
|
+ // params.put("sign_date", DateTimeFormatter.ofPattern(DatePattern.CHINESE_DATE_PATTERN).format(LocalDate.now()));
|
|
|
+ // resumeGenerate(templatePath, outFilePath, "/Users/jimmy/Desktop/SimSun.ttc", params);
|
|
|
}
|
|
|
}
|