我正在尝试使用 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";
我找到了一种使用 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');
}