reactjs ReactPDF renderToFile不呈现阿拉伯文本

mklgxw1f  于 2023-08-04  发布在  React
关注(0)|答案(1)|浏览(91)

bounty将于明天到期。回答此问题可获得+50声望奖励。buga希望引起更多的注意这个问题。

我试图将PDF渲染为文件,但PDF中的阿拉伯语文本显示为一些编码文本,如*BFJ) 'DE9DHE'*1'4/ 'D9H6J*0C1) EF等。

-- API --

import { renderToFile } from '@react-pdf/renderer';
import TicketDownloadPDF from '@/sections/@dashboard/ticket/view/TicketDownloadPDF';

export async function handler(req: NextApiReq, res: NextApiResponse) {
  try {
    const { selected } = req.body;

    const selectedTickets = await tickets.find({ _id: { $in: selected } })

    await renderToFile(<TicketDownloadPDF ticket={selectedTickets[0]} />, 'file1.pdf');

    res.status(200).json({ message: 'weewuu' });
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: 'Internal server error' });
  }
}

字符串

xdnvmnnf

xdnvmnnf1#

您需要在代码中单独注册阿拉伯字体,但首先安装fontkit模块,以便能够上传自定义字体:
要执行此操作,请使用命令:npm install @react-pdf/fontkit
然后在代码中添加以前下载的字体的注册:

import { renderToFile } from '@react-pdf/renderer';
import { Font } from '@react-pdf/renderer';
import path from 'path';
import TicketDownloadPDF from '@/sections/@dashboard/ticket/view/TicketDownloadPDF';

const fontPath = path.resolve('/fonts/ArabicFont.ttf'); // Set you own path here

Font.register({
  family: 'ArabicFont',
  src: fontPath,
});

export async function handler(req, res) {
  try {
    const { selected } = req.body;
    const selectedTickets = await tickets.find({ _id: { $in: selected } });

    await renderToFile(<TicketDownloadPDF ticket={selectedTickets[0]} />, 'file1.pdf');

    res.status(200).json({ message: 'weewuu' });
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: 'Internal server error' });
  }
}

字符串
现在,您应该能够在渲染文件中正确查看阿拉伯符号。但是,您应该记住,阿拉伯字母是从右向左排列的。这可以通过创建一个StyleSheet对象来支持,该对象将writingMode参数设置为rl,并将其重用为TicketDownloadPDF的样式。
如果您有任何不清楚或疑虑,请让我知道。

相关问题