jsPDF 库不导出西里尔字母

问题描述 投票:0回答:1

我正在尝试使用 JS 将 React 项目中的数据导出为 PDF。 (我也尝试了其他库)所以我使用 jsPDF 创建 pdf,它工作正常,直到我尝试用西里尔语导出某些内容。

async function exportDataToPDF() {
    const doc = new jsPDF();

    // Load the font file as a binary string
    const fontUrl = "../../../assets/fonts/Roboto-Regular.ttf";
    const fontData = await fetch(fontUrl).then(res => res.arrayBuffer());
    const fontArray = new Uint8Array(fontData);
    const fontString = String.fromCharCode.apply(null, Array.from(fontArray));

    // Add the font to the virtual file system
    doc.addFileToVFS("Roboto-Regular.ttf", fontString);

    // Add the font to the document
    doc.addFont("Roboto-Regular.ttf", "Roboto", "normal");

    // Set the font
    doc.setFont("Roboto");

    // Set font size and add text
    doc.setFontSize(16);
    doc.text('In english', 10, 10);
    doc.text('На български', 10, 20);

    // Save the PDF
    doc.save('Планирано производство.pdf');
}

我尝试通过这种方式导入字体,但找不到。它会在资产文件夹中找到其他文件。

import RobotoRegular from "../../../assets/fonts/Roboto-Regular.ttf"; 

然后我尝试在函数中添加路径,如代码所示,它确实读取了它,字体更改为西里尔字母,但它仍然不会读取西里尔字母。

const fontUrl = "../../../assets/fonts/Roboto-Regular.ttf";
javascript reactjs jspdf
1个回答
0
投票

我找到了一种使用 Base64 转换字体来修复它的方法。我转换了代码并将其放入导出的字体文件夹中。在我的组件中,我导入了它并将其设置为字体。我希望您发现它有帮助,因为互联网上没有很多简单的解决方案!

这是更新后的代码:

async function exportDataToPDF() {
    const doc = new jsPDF();

    // *** Font Embedding ***
    doc.addFileToVFS('Roboto-Regular.ttf', robotoFontBase64);
    doc.addFont('Roboto-Regular.ttf', 'Roboto', 'normal'); 
    doc.setFont('Roboto');

    // *** Text Output ***
    doc.setFontSize(16);
    doc.text('In english', 10, 10);
    doc.text('На български', 10, 20);

    // Save the PDF
    doc.save('Планирано производство.pdf');
}
© www.soinside.com 2019 - 2024. All rights reserved.