From 38553de8fe4a824919563db827019909caa65f9c Mon Sep 17 00:00:00 2001
From: fei <791364011@qq.com>
Date: 星期三, 24 十二月 2025 10:34:59 +0800
Subject: [PATCH] 修改了对应代码

---
 archiveManager/src/main/java/com/ruoyi/service/impl/pdfGenerateService.java |  163 +++++++++++++++++++++++++++++++++--------------------
 1 files changed, 101 insertions(+), 62 deletions(-)

diff --git a/archiveManager/src/main/java/com/ruoyi/service/impl/pdfGenerateService.java b/archiveManager/src/main/java/com/ruoyi/service/impl/pdfGenerateService.java
index d8cc7b7..41e1fe2 100644
--- a/archiveManager/src/main/java/com/ruoyi/service/impl/pdfGenerateService.java
+++ b/archiveManager/src/main/java/com/ruoyi/service/impl/pdfGenerateService.java
@@ -47,7 +47,7 @@
     public byte[] createQrCodeN(String content, int width, int height) throws IOException {
         QrConfig config = new QrConfig(width, height);
 
-        config.setMargin(3);
+        config.setMargin(0);
         // 楂樼籂閿欑骇鍒�
         config.setErrorCorrection(ErrorCorrectionLevel.H);
         // 璁剧疆鍓嶆櫙鑹诧紝鏃簩缁寸爜棰滆壊锛堣嚜琛岄�夋嫨棰滆壊淇敼锛�
@@ -267,62 +267,76 @@
     }
 
 
-    // 鑷畾涔夐〉闈簨浠剁被锛岀敤浜庡湪姣忎釜鏂伴〉闈㈡坊鍔犲嵎鍐呭皝闈㈠唴瀹�
+    // 鑷畾涔夐〉闈簨浠剁被锛岀敤浜庡湪姣忎釜鏂伴〉闈㈡坊鍔犲嵎鍐呭皝闈㈠拰鍗峰彿
     private class DirectoryHeaderPageEvent extends PdfPageEventHelper {
         private String volumeNumber;
-        private byte[] barcodeImageBytes;
+        private BaseFont bfChinese;
+        private Font chineseFont;
+        private Font chineseFont1;
+        private Image barcodeImage;
         
-        public DirectoryHeaderPageEvent(String volumeNumber, byte[] barcodeImageBytes) {
+        public DirectoryHeaderPageEvent(String volumeNumber, BaseFont bfChinese, Font chineseFont, Font chineseFont1, Image barcodeImage) {
             this.volumeNumber = volumeNumber;
-            this.barcodeImageBytes = barcodeImageBytes;
+            this.bfChinese = bfChinese;
+            this.chineseFont = chineseFont;
+            this.chineseFont1 = chineseFont1;
+            this.barcodeImage = barcodeImage;
         }
         
         @Override
         public void onStartPage(PdfWriter writer, Document document) {
             try {
-                // 璁剧疆涓枃瀛椾綋
-                BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
-                Font chineseFont = new Font(bfChinese, 12);
-                Font chineseFont1 = new Font(bfChinese, 16, Font.BOLD);
+                PdfContentByte cb = writer.getDirectContent();
+                float pageWidth = document.getPageSize().getWidth();
+                float pageHeight = document.getPageSize().getHeight();
                 
-                // 娣诲姞鏉″舰鐮�
-                Image img = Image.getInstance(barcodeImageBytes);
-                PdfPCell pdfPCell = new PdfPCell(img);
-                pdfPCell.setBorder(Rectangle.NO_BORDER);
-                pdfPCell.setMinimumHeight(40);
-                pdfPCell.setUseAscender(true);
-                pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_RIGHT);
-                pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
-                pdfPCell.setColspan(2);
-                pdfPCell.setPaddingBottom(30);
+                // 1. 娣诲姞鏉″舰鐮侊紙灞呬腑鏄剧ず锛岄〉闈㈤《閮級
+                float barcodeWidth = barcodeImage.getScaledWidth();
+                float barcodeHeight = barcodeImage.getScaledHeight();
+                float barcodeX = (pageWidth - barcodeWidth) / 2;
+                float barcodeY = pageHeight - 50 - barcodeHeight; // 椤甸潰椤堕儴涓嬫柟50鐐�
+                barcodeImage.setAbsolutePosition(barcodeX, barcodeY);
+                cb.addImage(barcodeImage);
                 
-                float[] columnWidths1 = {35f, 65f};
-                PdfPTable table1 = new PdfPTable(columnWidths1);
-                table1.setWidthPercentage(80);
-                table1.setHorizontalAlignment(Element.ALIGN_LEFT);
-                table1.setSpacingBefore(30f);
-                table1.addCell(pdfPCell);
+                // 2. 娣诲姞鍗峰唴鐩綍鏍囬锛堝眳涓樉绀猴紝鏉″舰鐮佷笅鏂癸級
+                String title = "鍗�    鍐�    鐩�    褰�";
+                float titleX = pageWidth / 2;
+                float titleY = pageHeight - 100; // 椤甸潰椤堕儴涓嬫柟100鐐�
+                cb.beginText();
+                // 鍒涘缓骞惰缃爣棰樹负鍔犵矖瀛椾綋
+                Font boldTitleFont = new Font(bfChinese, 16, Font.BOLD);
+                cb.setFontAndSize(boldTitleFont.getBaseFont(), boldTitleFont.getSize());
+                cb.setColorFill(BaseColor.BLACK);
+                cb.showTextAligned(PdfContentByte.ALIGN_CENTER, title, titleX, titleY, 0);
+                cb.endText();
                 
-                PdfContentByte canvas = writer.getDirectContent();
-                ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, new Phrase(" ", chineseFont), 
-                        document.left(), document.top() - 50, 0);
-                document.add(table1);
+                // 3. 娣诲姞鍗峰彿锛堝眳鍙虫樉绀猴紝鏍囬涓嬫柟锛�
+                String label = "鍗峰彿锛�";
+                String value = volumeNumber;
+                float recordInfoX = pageWidth - 30;
+                float recordInfoY = pageHeight - 130; // 椤甸潰椤堕儴涓嬫柟130鐐�
                 
-                // 娣诲姞鏍囬
-                Paragraph title = new Paragraph("鍗�    鍐�    鐩�    褰�", chineseFont1);
-                title.setAlignment(Element.ALIGN_CENTER);
-                document.add(title);
-                Paragraph withNewLine = new Paragraph("\n");
-                document.add(withNewLine);
-                document.add(withNewLine);
+                // 鍏堢粯鍒舵爣绛�"鍗峰彿锛�"
+                cb.beginText();
+                // 璁剧疆鍔犵矖瀛椾綋锛岄�氳繃Font.BOLD鍙傛暟
+                Font boldFont = new Font(bfChinese, 16, Font.BOLD);
+                cb.setFontAndSize(boldFont.getBaseFont(), boldFont.getSize());
+                cb.setColorFill(BaseColor.BLACK);
+                cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, label + value, recordInfoX, recordInfoY, 0);
+                cb.endText();
                 
-                // 娣诲姞鍗峰彿
-                Paragraph recordInfo = new Paragraph("鍗峰彿锛�" + volumeNumber, chineseFont);
-                recordInfo.setAlignment(Element.ALIGN_RIGHT);
-                document.add(recordInfo);
+                // 璁$畻鍊肩殑浣嶇疆骞剁粯鍒朵笅鍒掔嚎
+                float labelWidth = bfChinese.getWidthPoint(label, 12);
+                float valueWidth = bfChinese.getWidthPoint(value, 12);
+                float underlineStartX = recordInfoX - valueWidth;
+                float underlineEndX = recordInfoX;
+                float underlineY = recordInfoY - 2;
                 
-                document.add(withNewLine);
-                document.add(withNewLine);
+                cb.setColorStroke(BaseColor.BLACK);
+                cb.setLineWidth(0.5f);
+                cb.moveTo(underlineStartX, underlineY);
+                cb.lineTo(underlineEndX, underlineY);
+                cb.stroke();
                 
             } catch (Exception e) {
                 e.printStackTrace();
@@ -335,27 +349,44 @@
         Document document = new Document();
         PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdfPath));
         
-        // 娣诲姞椤甸潰浜嬩欢锛屽湪姣忎釜鏂伴〉闈㈣嚜鍔ㄦ坊鍔犲嵎鍐呭皝闈㈠唴瀹�
-        String volumeNumber = dvss.get(0).getRecordId();
-        byte[] barcodeImageBytes = barcodeService.generateBarcodeImage(volumeNumber);
-        writer.setPageEvent(new DirectoryHeaderPageEvent(volumeNumber, barcodeImageBytes));
-        
-        document.open();
-
-        // 鍒涘缓琛ㄦ牸锛�5鍒楋級
-        PdfPTable table = new PdfPTable(7);
-
-        // 璁剧疆琛ㄦ牸瀹藉害锛堝崰椤甸潰瀹藉害鐨�100%锛�
-        table.setWidthPercentage(100);
-        
-        // 璁剧疆鍒楀姣斾緥锛岀4鍒楋紙鏂囦欢棰樺悕锛夎缃緱鏇村
-        float[] columnWidths = {8f, 14f, 12f, 30f, 10f, 10f, 10f}; // 璋冩暣鍒楀姣斾緥锛岀4鍒楁枃浠堕鍚嶅崰40%
-        table.setWidths(columnWidths);
-        
         // 璁剧疆涓枃瀛椾綋
         BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
         Font chineseFont = new Font(bfChinese, 12);
         Font chineseFont1 = new Font(bfChinese, 16, Font.BOLD);
+        
+        // 鑾峰彇鍗峰彿
+        String volumeNumber = dvss.get(0).getRecordId();
+        
+        // 鍒涘缓鏉″舰鐮�
+        Image barcodeImage = Image.getInstance(barcodeService.generateBarcodeImage(volumeNumber));
+        barcodeImage.scaleToFit(80, 40); // 璁剧疆鏉″舰鐮佸ぇ灏�
+        
+        // 娉ㄥ唽椤甸潰浜嬩欢
+        DirectoryHeaderPageEvent pageEvent = new DirectoryHeaderPageEvent(volumeNumber, bfChinese, chineseFont1, chineseFont1, barcodeImage);
+        writer.setPageEvent(pageEvent);
+        
+        // 璁剧疆閫傚綋鐨勮竟璺濓紝涓哄嵎鍐呭皝闈€�佹潯褰㈢爜鍜屽嵎鍙烽鐣欑┖闂�
+        // setMargins(left, right, top, bottom) - 鍙傛暟椤哄簭锛氬乏銆佸彸銆佷笂銆佷笅
+        // 澧炲ぇ涓婅竟璺濅负160锛岀‘淇濋〉鐪夊唴瀹规湁瓒冲绌洪棿
+        document.setMargins(30, 30, 160, 30);
+        document.open();
+        
+        // 杩欓噷涓嶅啀闇�瑕佸湪绗竴椤垫墜鍔ㄦ坊鍔犲嵎鍐呭皝闈㈠唴瀹癸紝椤甸潰浜嬩欢浼氬鐞�
+        
+        // 娣诲姞涓�涓┖鐧芥钀斤紝纭繚琛ㄦ牸鍐呭涓嶄細涓庨《閮ㄥ厓绱犻噸鍙�
+        Paragraph blankParagraph = new Paragraph("");
+        document.add(blankParagraph);
+        
+        // 鍒涘缓琛ㄦ牸锛�7鍒楋級
+        PdfPTable table = new PdfPTable(7);
+
+        // 璁剧疆琛ㄦ牸瀹藉害锛堝崰椤甸潰瀹藉害鐨�80%锛屽眳涓樉绀猴級
+        table.setWidthPercentage(90);
+        table.setHorizontalAlignment(Element.ALIGN_CENTER);
+        
+        // 璁剧疆鍒楀姣斾緥锛岀4鍒楋紙鏂囦欢棰樺悕锛夊拰绗�2鍒楋紙鏂囦欢缂栧彿锛夎缃緱鏇村
+        float[] columnWidths = {10f, 16f, 14f, 30f, 10f, 10f, 10f}; // 璋冩暣鍒楀姣斾緥锛屽鍔犳枃浠剁紪鍙峰垪鐨勫搴�
+        table.setWidths(columnWidths);
         // 璁剧疆琛ㄥご琛屾暟锛岃繖鏍峰垎椤垫椂姣忛〉閮戒細鑷姩閲嶅琛ㄥご
         table.setHeaderRows(1);
         
@@ -386,9 +417,9 @@
                 table.addCell(cell);
 
 
-                //搴忓彿
+                //鏂囦欢缂栧彿锛堟。鍙凤級
                 PdfPCell cell1 = new PdfPCell(new Paragraph(cellData.getDocumentNumber()==null?"":cellData.getDocumentNumber().toString(),
-                        chineseFont));
+                        new Font(bfChinese, 12)));
                 cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
                 cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
 
@@ -470,7 +501,15 @@
 
        // 娣诲姞鍐呭
      //  String volumeNumber = "D3.4.1-05-2024-0002";
-       Paragraph recordInfo = new Paragraph("鍗峰彿锛�" + volumeNumber, chineseFont);
+       
+       // 鍒涘缓鍗峰彿娈佃惤锛屼娇鐢–hunk鏉ュ崟鐙鐞嗗嵎鍙峰�煎苟娣诲姞涓嬪垝绾�
+       Paragraph recordInfo = new Paragraph();
+       Chunk labelChunk = new Chunk("鍗峰彿锛�", chineseFont);
+       Chunk valueChunk = new Chunk(volumeNumber, chineseFont);
+       valueChunk.setUnderline(0.5f, -2f); // 娣诲姞涓嬪垝绾匡紝0.5f鏄嚎瀹斤紝-2f鏄嚎涓庢枃瀛楃殑璺濈
+       
+       recordInfo.add(labelChunk);
+       recordInfo.add(valueChunk);
        recordInfo.setAlignment(Element.ALIGN_RIGHT);
        document.add(recordInfo);
        int pcc = dmfs.size()<=1?0: dmfs.get(1).getCnt();

--
Gitblit v1.9.1