浏览代码

pdf代码提交

jingyuanchao 1 年之前
父节点
当前提交
1c8e51e508

+ 29 - 6
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfPageHelperEvent.java

@@ -6,8 +6,6 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.io.IOException;
-
 /**
  * @author jingyuanchao
  * @date 2023/12/18 20:18
@@ -22,6 +20,8 @@ public class PdfPageHelperEvent implements PdfPageEvent {
     private PdfWriter writer;
 
     private BaseFont fs;
+
+
     private Font tableFont;
 
     @Override
@@ -40,20 +40,43 @@ public class PdfPageHelperEvent implements PdfPageEvent {
 
     @Override
     public void onEndPage(PdfWriter pdfWriter, Document document) {
-        PdfContentByte cb = writer.getDirectContent();// 得到层
+       /* PdfContentByte cb = writer.getDirectContent();// 得到层
         cb.saveState(); // 开始
         cb.beginText();
         cb.setFontAndSize(fs, 10); // Header
-   /*             float x = document.top(-20);// 位置 // 左
+   *//*             float x = document.top(-20);// 位置 // 左
                 cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "H-Left", document.left(), x, 0); // 中
                 cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "第" + writer.getCurrentPageNumber() + "页", (document.right() + document.left()) / 2, x, 0); // 右
-                cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "H-Right", document.right(), x, 0); */
+                cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "H-Right", document.right(), x, 0); *//*
         float y = document.bottom(-80); // 左
         cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "", document.left(), y, 0); // 中
         cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "第" + writer.getCurrentPageNumber() + "页/共" + totalPageSize + "页", (document.right() + document.left()) / 2, y, 0); // 右
         cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "", document.right(), y, 0);
         cb.endText();
-        cb.restoreState();
+        cb.restoreState();*/
+
+        try {
+            // PDF文档内容
+            PdfContentByte pdfContent = writer.getDirectContent();
+            pdfContent.saveState();
+            pdfContent.beginText();
+            int footerFontSize = 10;
+            Font fontDetail = new Font(fs, footerFontSize, Font.NORMAL);
+            pdfContent.setFontAndSize(fs, footerFontSize);
+            // 页脚的页码 展示
+            String footerNum = String.format("第%d页,共" + totalPageSize + "页", writer.getPageNumber());
+            Phrase phrase = new Phrase(footerNum, fontDetail);
+            // 页码的 横轴 坐标 居中
+            float x = (document.left() + document.right()) / 2 + 10;
+            // 页码的 纵轴 坐标
+            float y = document.bottom(-20);
+            // 添加文本内容,进行展示页码
+            ColumnText.showTextAligned(pdfContent, Element.ALIGN_CENTER, phrase, x, y, 0);
+            pdfContent.endText();
+            pdfContent.restoreState();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
 
     }
 

+ 42 - 6
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java

@@ -7,22 +7,23 @@ import cn.hutool.extra.spring.SpringUtil;
 import com.lowagie.text.*;
 import com.lowagie.text.pdf.*;
 import com.xunmei.file.vo.ItextPdfTableVo;
-import com.xunmei.file.vo.PdfFilePathVo;
 import com.xunmei.system.api.domain.AccessDataVo;
 import com.xunmei.system.api.domain.CheckDataVo;
-import com.xunmei.system.api.domain.ResumptionPdf;
-import com.xunmei.system.api.domain.SafeCheckTaskRegisterBookVo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.text.StringEscapeUtils;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.io.Resource;
 
-import java.io.*;
-import java.util.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 public class PdfUtil {
@@ -536,4 +537,39 @@ public class PdfUtil {
         }
         document.add(table);
     }
+
+    public static void addPageNum(String srcPdfPath, String tagetPdfPath) {
+        try {
+            // 输出文件 流
+            FileOutputStream fos = new FileOutputStream(tagetPdfPath);
+
+            // 读取 源PDF文件,进行一页一页复制,才能触发 添加页码的  页面监听事件
+            PdfReader reader = new PdfReader(srcPdfPath);
+            // 获取 源文件总页数
+            int num = reader.getNumberOfPages();
+
+            // 新建文档,默认A4大小
+            Document document = new Document(PageSize.A4);
+            PdfWriter writer = PdfWriter.getInstance(document, fos);
+            // 设置页面监听事件,必须在open方法前
+           // writer.setPageEvent(new PdfPageHelperEvent(num,writer,document,));
+            document.open();
+            // PDF内容体
+            PdfContentByte pdfContent = writer.getDirectContent();
+            //System.out.println("总页数:" + num);
+            // 页面数是从1开始的
+            for (int i = 1; i <= num; i++) {
+                document.newPage();
+                // 设置空页码进行展示
+                writer.setPageEmpty(false);
+                PdfImportedPage page = writer.getImportedPage(reader, i);
+                // 复制好的页面,添加到内容去,触发事件监听
+                pdfContent.addTemplate(page, 0, 42);
+            }
+            document.close();
+            reader.close();
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
 }