如何在包含表格的反应中生成希伯来语 PDF?

问题描述

我在整个互联网上搜索了几个小时,我需要一个支持希伯来语的 PDF 生成器!我也需要在 PDF 中有一个表格。 我试过 JSpdf,但我得到的文本垃圾翻转了 הלימ 而不是 מילה。 我使用 JSpdf 的 autoTable 来制作我的表格,但我没有设法在表格中加入希伯来语,甚至没有翻转(我得到了垃圾)。

我愿意接受任何建议,不仅是 JSpdf,我还需要任何有用的东西。

这是我的代码

David-normal.js:

import { jsPDF } from "jspdf"
var font = '<here comes a very long string of the fone>';
var callAddFont = function () {
  this.addFiletoVFS('David-normal.ttf',font);
  this.addFont('David-normal.ttf','David','normal');
};
jsPDF.API.events.push(['addFonts',callAddFont])

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("דוח שעות:");

不幸的是,我的解决方案也会翻转英文单词。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...