我正在尝试生成阿拉伯语的 pdf 文档,我使用 fpdf 生成相同的英语格式。经过一些研究后,我最终用 tfpdf 和 tcpdf 替换了 fpdf。后者弄乱了我的 pdf 布局,并且不能 100% 处理阿拉伯语单词。所以我选择了 tfpdf。
经过对 tfpdf 的更多研究,我最终得到了以下代码:
//to add custom font from unicode folder
$pdf->AddFont('Tajawal', '', 'Tajawal-Medium.ttf', true);
//to set the custom font
$pdf->SetFont('Tajawal','',18,true);
//helper function to rever the arabic string since I get the output reversed in the pdf
function utf8_strrev($str){
preg_match_all('/./us', $str, $ar);
return implode(array_reverse($ar[0]));
}
//$answer comes from a php and is an arabic string
$pdf->MultiCell(0 , 7, utf8_strrev($answer),1);
如图所示(生成的 pdf 的屏幕截图),阿拉伯字母是分离/不相交的,但由于反向辅助功能,它们的顺序是正确的。我们如何解决 tfpdf 中的这个问题?
其他信息
我使用的字体是Tajawal,它是阿拉伯语谷歌字体:https://fonts.google.com/specimen/Tajawal?subset=arabic
我已将这些添加到我的 html 文档中:
ini_set('default_charset', 'UTF-8');
<html dir="rtl" lang="ar">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
我还尝试在数据库中插入相同的阿拉伯字段,它们工作得很好。
尝试了一段时间后,我发现最好的解决方案是使用 TCPDF for laravel 而不是 FPDF。您可以从这个小示例开始构建代码:
$html_content = '<h1 dir="rtl">يسبي</h1>';
PDF::SetTitle('Sample PDF');
PDF::SetFont('aealarabiya', '', 18);
PDF::AddPage();
PDF::writeHTML($html_content, true, false, true, false, '');
PDF::Output('SamplePDF.pdf');
您还可以查看此链接,了解有关用于生成阿拉伯语 pdf 的 TCPDF 库的更多详细信息。
重新尝试使用 UTF-8 编码生成 PDF 以处理阿拉伯字符
从 fpdf 导入 FPDF
创建 PDF
pdf = FPDF() pdf.set_auto_page_break(auto=True, margin=15) pdf.add_page()
设置阿拉伯字体(DejaVu,支持阿拉伯字体)
pdf.add_font('DejaVu', '', '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', uni=True) pdf.set_font("DejaVu", '', 16)
标题
pdf.cell(200, 10, txt="阿尔及利亚", ln=True,align='C') pdf.ln(10)
添加表格
pdf.set_font("DejaVu", '', 12) table_data = [ ["???", "???????????????????????????????????????????????????????????????????????? )", " 1. 一百人 2. 卷起 (??????) 3. 腿圈 (??????)"], ["???????????????????????????????????????????????????????????????平板支撑 (Plank) 2. 天鹅潜水 (????????????) 3. 单腿伸展 (Цазаق רס)"], ["ס", "разь", "ف٠فففف"], ["ف٠ففف") )", "1.肩桥(肩桥) 2. 侧抬腿 3. Clamshell (??)"], ["?????", "??????????????????????????????????????????????????????????????????????????脊柱拉伸 2. 锯 (Saw) 3. 美人鱼伸展 (Tami)"], ["???????????????????????????????????????????????????????????????????????????????????????????????????????????? ”,“1。骨盆卷曲 (?????) 2. 双腿伸展 3. 童子式 (٩٠١فف)"] ]
表格格式
对于 table_data 中的行:对于行中的项目:pdf.multi_cell(60, 10, txt=item, border=1,align='C') pdf.ln(0)
添加 YouTube 频道
pdf.ln(10) pdf.set_font("DejaVu", '', 12) pdf.cell(200, 10, txt="قแกกกกงกกกกกก:", ln=True) pdf.ln(5)
channels = [ "1. 博客: قнал грония Ђидим тамия قר قиня язык قибидьян。", "2. Jessica Valant 普拉提: قُقðм Царин ققق ق قه هև ", "3. 与妮可一起移动: