chengjie 5 月之前
父节点
当前提交
28973e1ce5
共有 2 个文件被更改,包括 25 次插入37 次删除
  1. 二进制
      public/fonts/方正黑体简体.TTF
  2. 25 37
      src/api/yjbdc/yjbdcController.js

二进制
public/fonts/方正黑体简体.TTF


+ 25 - 37
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 = params.Words;
184
+        const words = JSON.parse(params.Words).join(",");
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
-        "单词若是脏话,像'fuck'、'shit'等,可以忽略;"+
224
+        "单词若是脏话,像'f***'、's***'等,可以忽略;"+
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 (Number(item.Level)){
288
+                switch (item.Level){
289 289
                     case 0:
290 290
                         item.LevelStr="小学";
291 291
                         break;
@@ -350,9 +350,8 @@ export async function GeneratePDF(ctx) {
350 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 357
         const selectFont = (text, defaultFont = 'Helvetica') => {
@@ -412,8 +411,7 @@ export async function GeneratePDF(ctx) {
412 411
         console.log("Questions to display:", questions.length);
413 412
 
414 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 415
            .fontSize(pixelToPt(60))
418 416
            .text("Story", pixelToPt(120), pixelToPt(90), {
419 417
                width: pixelToPt(200),
@@ -421,8 +419,7 @@ export async function GeneratePDF(ctx) {
421 419
            });
422 420
 
423 421
         // 2. 在top:250,left:120像素处写英文文章,48像素大小,宽1240像素,高自适应,Regular粗细
424
-        // 使用selectFont函数动态选择字体
425
-        doc.font(selectFont(articleText, 'Helvetica'))
422
+        doc.font('Helvetica')
426 423
            .fontSize(pixelToPt(48))
427 424
            .text(articleText, pixelToPt(120), pixelToPt(250), {
428 425
                width: pixelToPt(1240),
@@ -513,13 +510,10 @@ export async function GeneratePDF(ctx) {
513 510
                 let optionY = doc.y + pixelToPt(20);
514 511
                 
515 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 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 538
                 const options = questions[1].OptionsEnglish || [];
545 539
                 let optionY = doc.y + pixelToPt(20);
546 540
                 
547 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 546
                     optionY = doc.y + pixelToPt(10);
556 547
                 }
557 548
             }
@@ -559,28 +550,25 @@ export async function GeneratePDF(ctx) {
559 550
             // 问题3和问题4 - left:740像素位置
560 551
             if (questions.length >= 3) {
561 552
                 // 问题3标题
562
-                const q3Text = `3. ${questions[2].QuestionEnglish || "Question 3"}`;
563
-                doc.font(selectFont(q3Text, 'Helvetica-Bold'))
553
+                doc.font('Helvetica-Bold')
564 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 556
                        width: pixelToPt(540),
567 557
                        align: 'left'
568 558
                    });
569 559
                 
570 560
                 // 问题3选项
571
-                doc.fontSize(pixelToPt(36));
561
+                doc.font('Helvetica')
562
+                   .fontSize(pixelToPt(36));
572 563
                 
573 564
                 const options3 = questions[2].OptionsEnglish || [];
574 565
                 let option3Y = doc.y + pixelToPt(20);
575 566
                 
576 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 572
                     option3Y = doc.y + pixelToPt(10);
585 573
                 }
586 574