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 3800b0d5..a72db2f5 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 @@ -395,8 +395,10 @@ export class PdfGeneratorService { const signatureImage = await pdfDoc.embedPng(signature.signatureImagePng); // 获取签名字段位置作为参考 - let signatureX = 380; // 默认 x 坐标 - let signatureY = 100; // 默认 y 坐标 + let fieldX = 380; // 默认 x 坐标 + let fieldY = 100; // 默认 y 坐标 + let fieldWidth = 92; + let fieldHeight = 51; try { const form = pdfDoc.getForm(); @@ -404,9 +406,10 @@ export class PdfGeneratorService { const widgets = signatureButton.acroField.getWidgets(); if (widgets.length > 0) { const rect = widgets[0].getRectangle(); - // 使用字段左下角作为签名位置参考 - signatureX = rect.x; - signatureY = rect.y; + fieldX = rect.x; + fieldY = rect.y; + fieldWidth = rect.width; + fieldHeight = rect.height; this.logger.log(`Signature field position: x=${rect.x}, y=${rect.y}, field size: ${rect.width}x${rect.height}`); } } catch { @@ -433,6 +436,12 @@ export class PdfGeneratorService { scaledWidth = (width * maxHeight) / height; } + // 计算签名位置:以签名字段中心为基准,将签名图片居中放置 + const fieldCenterX = fieldX + fieldWidth / 2; + const fieldCenterY = fieldY + fieldHeight / 2; + const signatureX = fieldCenterX - scaledWidth / 2; + const signatureY = fieldCenterY - scaledHeight / 2; + // 在签名位置绘制图片 lastPage.drawImage(signatureImage, { x: signatureX,