From ad5b153fa9399ef745077d43fbf9a01bd570d3f8 Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 26 Dec 2025 05:56:38 -0800 Subject: [PATCH] =?UTF-8?q?fix(pdf-generator):=20=E7=AD=BE=E5=90=8D?= =?UTF-8?q?=E6=8C=89=E5=AD=97=E6=AE=B5=E5=B0=BA=E5=AF=B8=E7=AD=89=E6=AF=94?= =?UTF-8?q?=E4=BE=8B=E7=BC=A9=E6=94=BE=E5=B9=B6=E5=B1=85=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 计算宽度和高度的缩放比例,取较小值确保签名完全在字段内 - 在字段内居中放置签名图片 - 符合行业标准:签名根据字段尺寸自适应缩放 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../pdf/pdf-generator.service.ts | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/backend/services/planting-service/src/infrastructure/pdf/pdf-generator.service.ts b/backend/services/planting-service/src/infrastructure/pdf/pdf-generator.service.ts index 32eda333..0b1b6d37 100644 --- a/backend/services/planting-service/src/infrastructure/pdf/pdf-generator.service.ts +++ b/backend/services/planting-service/src/infrastructure/pdf/pdf-generator.service.ts @@ -388,28 +388,35 @@ export class PdfGeneratorService { const widget = widgets[0]; const rect = widget.getRectangle(); - // 获取签名图片原始尺寸并按比例缩放 + // 获取签名图片原始尺寸 const imgDims = signatureImage.scale(1); - // 目标宽度 150pt(约 5cm),保持宽高比 - const targetWidth = 150; - const scale = targetWidth / imgDims.width; - const scaledWidth = targetWidth; + // 按字段尺寸等比例缩放签名图片 + // 计算宽度和高度的缩放比例,取较小值以确保签名完全在字段内 + const scaleX = rect.width / imgDims.width; + const scaleY = rect.height / imgDims.height; + const scale = Math.min(scaleX, scaleY); + + const scaledWidth = imgDims.width * scale; const scaledHeight = imgDims.height * scale; + // 在字段内居中放置签名 + const offsetX = (rect.width - scaledWidth) / 2; + const offsetY = (rect.height - scaledHeight) / 2; + // 获取按钮所在的页面 const pages = pdfDoc.getPages(); const page = pages[5]; // 第6页(签名区域) - // 在按钮位置绘制缩放后的签名图片 + // 在按钮位置绘制缩放后的签名图片(居中) page.drawImage(signatureImage, { - x: rect.x, - y: rect.y, + x: rect.x + offsetX, + y: rect.y + offsetY, width: scaledWidth, height: scaledHeight, }); - this.logger.log(`Signature embedded at (${rect.x}, ${rect.y}) with size ${scaledWidth}x${scaledHeight}`); + this.logger.log(`Signature embedded at (${rect.x + offsetX}, ${rect.y + offsetY}) with size ${scaledWidth}x${scaledHeight}, field size: ${rect.width}x${rect.height}`); } else { throw new Error('No widgets found for signature button'); }