chengjie 5 月之前
父節點
當前提交
406fd67c52
共有 1 個文件被更改,包括 23 次插入21 次删除
  1. 23 21
      src/api/yjbdc/yjbdcController.js

+ 23 - 21
src/api/yjbdc/yjbdcController.js

@@ -350,6 +350,18 @@ export async function GeneratePDF(ctx) {
350 350
             autoFirstPage: true
351 351
         });
352 352
 
353
+        // 注册中文字体
354
+        doc.registerFont('ChineseFont', '/usr/share/fonts/google-droid/DroidSansFallback.ttf');
355
+        
356
+        // 定义字体选择函数,根据内容是否包含中文选择合适的字体
357
+        const selectFont = (text, defaultFont = 'Helvetica') => {
358
+            // 检查文本是否包含中文字符
359
+            if (/[\u4E00-\u9FFF]/.test(text)) {
360
+                return 'ChineseFont';
361
+            }
362
+            return defaultFont;
363
+        };
364
+
353 365
         // 收集生成的 PDF 数据
354 366
         const chunks = [];
355 367
         doc.on('data', (chunk) => chunks.push(chunk));
@@ -420,10 +432,10 @@ export async function GeneratePDF(ctx) {
420 432
         console.log("Article end Y position:", articleEndY);
421 433
 
422 434
         // 3. 在top:90,left:1443像素处写"备注",48像素大小,Regular粗细
423
-        // 由于默认字体不支持中文,使用英文替代,或者考虑添加中文字体支持
424
-        doc.font('Helvetica')
435
+        // 使用中文字体显示中文
436
+        doc.font('ChineseFont')
425 437
            .fontSize(pixelToPt(48))
426
-           .text("Words", pixelToPt(1443), pixelToPt(90), {
438
+           .text("备注", pixelToPt(1443), pixelToPt(90), {
427 439
                width: pixelToPt(537),
428 440
                align: 'left'
429 441
            });
@@ -482,17 +494,17 @@ export async function GeneratePDF(ctx) {
482 494
         if (questions.length > 0) {
483 495
             // 问题1和答案 - left:120像素位置
484 496
             if (questions.length >= 1) {
485
-                // 问题标题
486
-                doc.font('Helvetica-Bold')
497
+                // 问题标题 - 检查是否包含中文并使用适当的字体
498
+                const q1Text = `1. ${questions[0].QuestionEnglish || "Question 1"}`;
499
+                doc.font(/[\u4E00-\u9FFF]/.test(q1Text) ? 'ChineseFont' : 'Helvetica-Bold')
487 500
                    .fontSize(pixelToPt(36))
488
-                   .text(`1. ${questions[0].QuestionEnglish || "Question 1"}`, pixelToPt(120), lineY + pixelToPt(100), {
501
+                   .text(q1Text, pixelToPt(120), lineY + pixelToPt(100), {
489 502
                        width: pixelToPt(540),
490 503
                        align: 'left'
491 504
                    });
492 505
                 
493 506
                 // 问题选项
494
-                doc.font('Helvetica')
495
-                   .fontSize(pixelToPt(36));
507
+                doc.fontSize(pixelToPt(36));
496 508
                 
497 509
                 const options = questions[0].OptionsEnglish || [];
498 510
                 let optionY = doc.y + pixelToPt(20);
@@ -657,24 +669,14 @@ export async function GeneratePDF(ctx) {
657 669
         const timeY = doc.page.height - pixelToPt(118);
658 670
         // 计算正确的位置:总宽度2100像素 - 右边距380像素 = 右边缘位置1720像素
659 671
         // 为了使用text()方法的右对齐,设置起始位置为1720-380=1340像素
660
-        doc.fontSize(pixelToPt(32))
672
+        doc.font('ChineseFont')  // 使用中文字体显示包含中文的日期
673
+           .fontSize(pixelToPt(32))
661 674
            .text(currentTime, pixelToPt(1340), timeY, {
662 675
                width: pixelToPt(380),
663 676
                align: 'right'
664 677
            });
665 678
 
666
-        // 在底部添加页码和版权信息
667
-        const footerY = doc.page.height - pixelToPt(50);
668
-        doc.fontSize(pixelToPt(10))
669
-           .text(`Page 1`, pixelToPt(120), footerY, {
670
-               width: pixelToPt(100),
671
-               align: 'left'
672
-           })
673
-           .text(`© ${new Date().getFullYear()} 妙果英语`, pixelToPt(1780), footerY, {
674
-               width: pixelToPt(200),
675
-               align: 'right'
676
-           });
677
-
679
+        
678 680
         console.log("PDF generation completed, finalizing document...");
679 681
 
680 682
         // 使用 Promise 等待 PDF 生成完成