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