问题描述
我在整个互联网上搜索了几个小时,我需要一个支持希伯来语的 PDF 生成器!我也需要在 PDF 中有一个表格。 我试过 JSpdf,但我得到的文本垃圾翻转了 הלימ 而不是 מילה。 我使用 JSpdf 的 autoTable 来制作我的表格,但我没有设法在表格中加入希伯来语,甚至没有翻转(我得到了垃圾)。
我愿意接受任何建议,不仅是 JSpdf,我还需要任何有用的东西。
这是我的代码:
David-normal.js:
reportGenerator.js:
import jsPDF from "jspdf";
import "jspdf-autotable";
import "../components/David-normal.js";
// Date Fns is used to format the dates we receive
// from our API call
import { format } from "date-fns";
// define a generatePDF function that accepts a reports argument
const generatePDF = reports => {
//initialize jsPDF
const doc = new jsPDF();
doc.addFont("David-normal.ttf","David","normal");
doc.setFont("David"); // set font
doc.setFontSize(12);
// define the columns we want and their titles
const tableColumn = [ "שם עובד","מספר פרויקט","תאריך דיוח","כניסה","יציאה","תיאור"];
// define an empty array of rows
const tableRows = [];
// for each report pass all its data into an array
reports.forEach(report => {
const reportData = [
report.worker_id,report.project_id,report.reporting_date,report.start_time,report.end_time,report.description,// called date-fns to format the date on the report
format(new Date(report.reporting_date),"yyyy-MM-dd")
];
// push each reports's info into a row
tableRows.push(reportData);
});
// startY is basically margin-top
doc.autoTable(tableColumn,tableRows,{ font: 'David',align: 'right',isSymmetricSwapping: true,isInputVisual: true,isOutputVisual: false });
const date = Date().split(" ");
// we use a date string to generate our filename.
const dateStr = date[0] + date[1] + date[2] + date[3] + date[4];
// reports title.
let text = "דוח שעות:"
doc.text(text,100,10,{align: 'right',isOutputVisual: false});
// we define the name of our PDF file.
doc.save(`report_${dateStr}.pdf`);
};
export default generatePDF;
等待您的帮助!谢谢!
解决方法
我以间接方式修复了代码,将样式添加到文本和自动表格中:
doc.autoTable(tableColumn,tableRows,{styles: {font: "David",align: 'right',isSymmetricSwapping: true,isInputVisual: true,isOutputVisual: false}});
doc.text(text,100,10,{styles: {font: "David" }});
并做了一个反向函数来修复字母:
function fix(str){
return str.split('').reverse().join('');
}
然后每当我知道有希伯来语时我就会调用它:
let text = fix("דוח שעות:");
不幸的是,我的解决方案也会翻转英文单词。