chengjie 6 miesięcy temu
rodzic
commit
44cf74df72
1 zmienionych plików z 25 dodań i 24 usunięć
  1. 25 24
      src/api/yjbdc/yjbdcController.js

+ 25 - 24
src/api/yjbdc/yjbdcController.js

@@ -482,8 +482,7 @@ export async function GeneratePDF(ctx) {
482
            .fill('black');
482
            .fill('black');
483
 
483
 
484
         // 5. 在top:250,left:1443像素,宽537像素,高900像素的空间内竖排显示1-10个单词,每行一个,右对齐
484
         // 5. 在top:250,left:1443像素,宽537像素,高900像素的空间内竖排显示1-10个单词,每行一个,右对齐
485
-        doc.font('Helvetica')  // 使用常规体(Regular)
486
-           .fontSize(pixelToPt(48));
485
+        doc.font('Helvetica');  // 使用常规体(Regular)
487
            
486
            
488
         // 计算单词显示区域
487
         // 计算单词显示区域
489
         const wordAreaTop = pixelToPt(250);
488
         const wordAreaTop = pixelToPt(250);
@@ -495,14 +494,31 @@ export async function GeneratePDF(ctx) {
495
         const wordsArray = Array.isArray(words) ? words : 
494
         const wordsArray = Array.isArray(words) ? words : 
496
                           (typeof words === 'string' ? words.split(',') : []);
495
                           (typeof words === 'string' ? words.split(',') : []);
497
         
496
         
498
-        //console.log("Words array for display:", wordsArray);
499
-        
500
         // 显示单词(最多10个)
497
         // 显示单词(最多10个)
501
         const maxWords = Math.min(wordsArray.length, 10);
498
         const maxWords = Math.min(wordsArray.length, 10);
502
         
499
         
503
         // 根据单词数量动态计算每个单词的高度空间
500
         // 根据单词数量动态计算每个单词的高度空间
504
         const wordHeight = pixelToPt(80);  // 固定高度,确保足够的空间显示
501
         const wordHeight = pixelToPt(80);  // 固定高度,确保足够的空间显示
505
         
502
         
503
+        // 首先确定所有单词中需要的最小字体大小
504
+        let minFontSize = pixelToPt(48); // 默认字体大小
505
+        for (let i = 0; i < maxWords; i++) {
506
+            const word = wordsArray[i];
507
+            if (word) {
508
+                const wordLength = word.toString().length;
509
+                // 根据词组长度确定需要的字体大小
510
+                if (wordLength > 15) {
511
+                    minFontSize = Math.min(minFontSize, pixelToPt(36)); // 长词组使用较小字体
512
+                } else if (wordLength > 10) {
513
+                    minFontSize = Math.min(minFontSize, pixelToPt(42)); // 中等长度词组使用中等字体
514
+                }
515
+            }
516
+        }
517
+        
518
+        // 使用确定的字体大小显示所有单词
519
+        doc.fontSize(minFontSize);
520
+        console.log(`Using font size ${minFontSize} for all words`);
521
+        
506
         for (let i = 0; i < maxWords; i++) {
522
         for (let i = 0; i < maxWords; i++) {
507
             const word = wordsArray[i];
523
             const word = wordsArray[i];
508
             if (word) {  // 确保单词存在
524
             if (word) {  // 确保单词存在
@@ -513,26 +529,11 @@ export async function GeneratePDF(ctx) {
513
                     // 添加调试信息
529
                     // 添加调试信息
514
                     console.log(`Drawing word: "${word}" at position: ${yPosition}`);
530
                     console.log(`Drawing word: "${word}" at position: ${yPosition}`);
515
                     
531
                     
516
-                    // 检查词组长度,如果过长则调整字体大小
517
-                    const wordLength = word.toString().length;
518
-                    let fontSize = pixelToPt(48); // 默认字体大小
519
-                    
520
-                    // 根据词组长度动态调整字体大小
521
-                    if (wordLength > 15) {
522
-                        fontSize = pixelToPt(36); // 长词组使用较小字体
523
-                    } else if (wordLength > 10) {
524
-                        fontSize = pixelToPt(42); // 中等长度词组使用中等字体
525
-                    }
526
-                    
527
-                    doc.fontSize(fontSize)
528
-                       .text(word.toString(), wordAreaLeft, yPosition, {
529
-                            width: wordAreaWidth,
530
-                            align: 'right',  // 右对齐
531
-                            lineBreak: true  // 允许自动换行,处理特别长的词组
532
-                        });
533
-                    
534
-                    // 重置字体大小为默认值,以便下一个词组使用
535
-                    doc.fontSize(pixelToPt(48));
532
+                    doc.text(word.toString(), wordAreaLeft, yPosition, {
533
+                        width: wordAreaWidth,
534
+                        align: 'right',  // 右对齐
535
+                        lineBreak: true  // 允许自动换行,处理特别长的词组
536
+                    });
536
                 }
537
                 }
537
             }
538
             }
538
         }
539
         }