chengjie 6 kuukautta sitten
vanhempi
commit
28973e1ce5
2 muutettua tiedostoa jossa 25 lisäystä ja 37 poistoa
  1. BIN
      public/fonts/方正黑体简体.TTF
  2. 25 37
      src/api/yjbdc/yjbdcController.js

BIN
public/fonts/方正黑体简体.TTF


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

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