pdflib unicode字符未显示

时间:2016-01-21 08:58:02

标签: php unicode true-type-fonts pdflib

我需要使用pdflib version 8撰写pdf 因为我想渲染某些unicode字符

但他们没有展示。

但是下面的字符显示

我想知道可能的原因是什么。 我应该如何显示上面的字符。

以下是代码

$p = PDF_new();

/*  open new PDF file; insert a file name to create the PDF on disk */
if (PDF_begin_document($p, "", "") == 0) {
    die("Error: " . PDF_get_errmsg($p));
}
PDF_set_info($p, "Creator", "Abc");
PDF_set_info($p, "Author", "Abc");
PDF_set_info($p, "Title", "Test");
pdf_set_option($p, "textformat=utf8");

PDF_begin_page_ext($p, 595, 842, "");
$fontdir = '/usr/share/fonts/truetype/dejavu';
pdf_set_parameter($p, "FontOutline", "Dejavu=$fontdir/DejaVuSans.ttf");
$font = pdf_load_font($p, "Dejavu", "unicode","");

PDF_setfont($p, $font, 24.0);
PDF_set_text_pos($p, 50, 700);
pdf_show_xy($p,"dejb €",100,490);
pdf_show_xy($p,"dejb  ",200,490);
PDF_end_page_ext($p, "");

PDF_end_document($p, "");

$buf = PDF_get_buffer($p);
$len = strlen($buf);

header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=hello.pdf");
print $buf;

PDF_delete($p);

输出

enter image description here

修改

尝试使用freesans字体而不是dejavu,但输出没有变化。

$fontdir = '/usr/share/fonts/truetype/freefont';
pdf_set_parameter($p, "FontOutline", "FreeSans=$fontdir/FreeSans.ttf");
$font = pdf_load_font($p, "FreeSans", "unicode","")

1 个答案:

答案 0 :(得分:3)

您可以使用包含所需字形的字体来解决您的问题。当您检查链接页面的页面" MATHEMATICAL ITALIC SMALL A"您可以看到指向" Fonts that support U+1D44E":

的链接

正如您所看到的,只有少数字体支持此字形,例如" DejaVu Serif Italic "。当我使用DejaVu包中的DejaVu Serif Italic(DejaVuSerif-Italic.ttf)时,我得到了预期的输出:

enter image description here

当然其他字体也可能支持这种字形,你不仅限于DejaVuSans Serif。

您的代码只需注意一句:行:

pdf_set_option($p, "textformat=utf8");

需要PDFlib 9.请使用

PDF_set_parameter($p, "textformat", "utf8");

代替。