PHP FPDF 阿拉伯语文本隔离

问题描述 投票:0回答:2

我正在尝试生成阿拉伯语的 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); 

enter image description here

如图所示(生成的 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">

我还尝试在数据库中插入相同的阿拉伯字段,它们工作得很好。

php pdf-generation fpdf
2个回答
4
投票

尝试了一段时间后,我发现最好的解决方案是使用 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 库的更多详细信息。


0
投票

重新尝试使用 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. 与妮可一起移动:

© www.soinside.com 2019 - 2024. All rights reserved.