chengjie пре 5 месеци
родитељ
комит
30539a29e8
1 измењених фајлова са 37 додато и 25 уклоњено
  1. 37 25
      src/api/yjbdc/yjbdcController.js

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

@@ -181,7 +181,7 @@ export async function GenerateArticle(ctx) {
181 181
     let result = globalCache.get(url);
182 182
     if (result === 0) {
183 183
         const params = ctx.request.body;
184
-        const words = JSON.parse(params.Words).join(",");
184
+        const words = params.Words;
185 185
         const articleStyle = params.ArticleStyle;
186 186
 
187 187
         //文章类型
@@ -221,7 +221,7 @@ export async function GenerateArticle(ctx) {
221 221
 
222 222
         let content = "将"+words+"这些单词生成一篇英文文章。要求"+
223 223
         "[难度];"+
224
-        "单词若是脏话,像'f***'、's***'等,可以忽略;"+
224
+        "单词若是脏话,像'fuck'、'shit'等,可以忽略;"+
225 225
         "文章类型是'"+articleStyle+"([类型])';"+
226 226
         "文章单词数在200个左右,最多不能超过300个;"+
227 227
         "文章按每句分成数组,且每句都有中文翻译;"+
@@ -285,7 +285,7 @@ export async function GetYJBDCArticleList(ctx) {
285 285
             for(let i=0;i<result.length;i++){
286 286
                 let item=result[i];
287 287
                 item.CreateTime=moment(item.CreateTime).format("YYYY年MM月DD日 HH:mm");
288
-                switch (item.Level){
288
+                switch (Number(item.Level)){
289 289
                     case 0:
290 290
                         item.LevelStr="小学";
291 291
                         break;
@@ -350,8 +350,9 @@ 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');
353
+        // 注册中文字体 - 使用Mac系统的PingFang字体
354
+        //doc.registerFont('ChineseFont', '/usr/share/fonts/google-droid/DroidSansFallback.ttf');
355
+        doc.registerFont('ChineseFont', '/System/Library/Fonts/PingFang.ttc');
355 356
         
356 357
         // 定义字体选择函数,根据内容是否包含中文选择合适的字体
357 358
         const selectFont = (text, defaultFont = 'Helvetica') => {
@@ -411,7 +412,8 @@ export async function GeneratePDF(ctx) {
411 412
         console.log("Questions to display:", questions.length);
412 413
 
413 414
         // 1. 在top:90,left:120像素处写"Story",60像素大小,Semibold粗细
414
-        doc.font('Helvetica-Bold')  // 使用Helvetica-Bold作为Semibold替代
415
+        // 使用selectFont函数动态选择字体
416
+        doc.font(selectFont("Story", 'Helvetica-Bold'))  // 使用Helvetica-Bold作为Semibold替代
415 417
            .fontSize(pixelToPt(60))
416 418
            .text("Story", pixelToPt(120), pixelToPt(90), {
417 419
                width: pixelToPt(200),
@@ -419,7 +421,8 @@ export async function GeneratePDF(ctx) {
419 421
            });
420 422
 
421 423
         // 2. 在top:250,left:120像素处写英文文章,48像素大小,宽1240像素,高自适应,Regular粗细
422
-        doc.font('Helvetica')
424
+        // 使用selectFont函数动态选择字体
425
+        doc.font(selectFont(articleText, 'Helvetica'))
423 426
            .fontSize(pixelToPt(48))
424 427
            .text(articleText, pixelToPt(120), pixelToPt(250), {
425 428
                width: pixelToPt(1240),
@@ -510,10 +513,13 @@ export async function GeneratePDF(ctx) {
510 513
                 let optionY = doc.y + pixelToPt(20);
511 514
                 
512 515
                 for (let i = 0; i < options.length; i++) {
513
-                    doc.text(options[i] || `Option ${i+1}`, pixelToPt(120), optionY, {
514
-                        width: pixelToPt(540),
515
-                        align: 'left'
516
-                    });
516
+                    const optionText = options[i] || `Option ${i+1}`;
517
+                    // 检查选项是否包含中文并使用适当的字体
518
+                    doc.font(/[\u4E00-\u9FFF]/.test(optionText) ? 'ChineseFont' : 'Helvetica')
519
+                       .text(optionText, pixelToPt(120), optionY, {
520
+                           width: pixelToPt(540),
521
+                           align: 'left'
522
+                       });
517 523
                     optionY = doc.y + pixelToPt(10);
518 524
                 }
519 525
             }
@@ -532,17 +538,20 @@ export async function GeneratePDF(ctx) {
532 538
                    });
533 539
                 
534 540
                 // 问题选项
535
-                doc.font('Helvetica')
536
-                   .fontSize(pixelToPt(36));
541
+                doc.fontSize(pixelToPt(36));
542
+                // 不预先设置字体,将在每个选项中根据内容动态选择
537 543
                 
538 544
                 const options = questions[1].OptionsEnglish || [];
539 545
                 let optionY = doc.y + pixelToPt(20);
540 546
                 
541 547
                 for (let i = 0; i < options.length; i++) {
542
-                    doc.text(options[i] || `Option ${i+1}`, pixelToPt(120), optionY, {
543
-                        width: pixelToPt(540),
544
-                        align: 'left'
545
-                    });
548
+                    const optionText = options[i] || `Option ${i+1}`;
549
+                    // 检查选项是否包含中文并使用适当的字体
550
+                    doc.font(/[\u4E00-\u9FFF]/.test(optionText) ? 'ChineseFont' : 'Helvetica')
551
+                       .text(optionText, pixelToPt(120), optionY, {
552
+                           width: pixelToPt(540),
553
+                           align: 'left'
554
+                       });
546 555
                     optionY = doc.y + pixelToPt(10);
547 556
                 }
548 557
             }
@@ -550,25 +559,28 @@ export async function GeneratePDF(ctx) {
550 559
             // 问题3和问题4 - left:740像素位置
551 560
             if (questions.length >= 3) {
552 561
                 // 问题3标题
553
-                doc.font('Helvetica-Bold')
562
+                const q3Text = `3. ${questions[2].QuestionEnglish || "Question 3"}`;
563
+                doc.font(selectFont(q3Text, 'Helvetica-Bold'))
554 564
                    .fontSize(pixelToPt(36))
555
-                   .text(`3. ${questions[2].QuestionEnglish || "Question 3"}`, pixelToPt(740), lineY + pixelToPt(100), {
565
+                   .text(q3Text, pixelToPt(740), lineY + pixelToPt(100), {
556 566
                        width: pixelToPt(540),
557 567
                        align: 'left'
558 568
                    });
559 569
                 
560 570
                 // 问题3选项
561
-                doc.font('Helvetica')
562
-                   .fontSize(pixelToPt(36));
571
+                doc.fontSize(pixelToPt(36));
563 572
                 
564 573
                 const options3 = questions[2].OptionsEnglish || [];
565 574
                 let option3Y = doc.y + pixelToPt(20);
566 575
                 
567 576
                 for (let i = 0; i < options3.length; i++) {
568
-                    doc.text(options3[i] || `Option ${i+1}`, pixelToPt(740), option3Y, {
569
-                        width: pixelToPt(540),
570
-                        align: 'left'
571
-                    });
577
+                    const option3Text = options3[i] || `Option ${i+1}`;
578
+                    // 检查选项是否包含中文并使用适当的字体
579
+                    doc.font(selectFont(option3Text, 'Helvetica'))
580
+                       .text(option3Text, pixelToPt(740), option3Y, {
581
+                           width: pixelToPt(540),
582
+                           align: 'left'
583
+                       });
572 584
                     option3Y = doc.y + pixelToPt(10);
573 585
                 }
574 586