|
|
@@ -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 生成完成
|