2016-01-21 43 views
0

我是构建PDF使用在pdflib version 8 我想使某些Unicode字符的PDFlib 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,但在T没有变化他输出。

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

尝试使用freesans而不是dejavusans – donald123

+0

@ donald123没有它的力量工作。输出没有变化。检查更新后的问题 –

回答

3

您可以通过使用包含所需字形的字体来解决您的问题。当您检查您的链接页面“数学ITALIC小A”的页面,您可以看到一个链接到“Fonts that support U+1D44E‘:

正如你所看到的,只是几个字体支持这个雕文,例如’幻觉记忆衬线斜体“。当我使用幻觉记忆衬线斜体(DejaVuSerif-Italic.ttf)从幻觉记忆包我得到的预期输出:

enter image description here

当然还有其他字体可能支持这个字形,你是不是仅限于DejaVuSans衬线。

只是一个记录到你的代码:行:

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

需要的PDFlib 9.请使用

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

代替。

+0

使用支持的帮助确实解决了问题。然而,我的内容是动态的,需要我每隔几个字符在'DevajuSerif-Italic'和'DejaVuSerif'之间切换。解决这个问题的一种方法是分割字符串并不断更改子字符串之间的字体。有没有优雅的解决方案? –

+0

你可以使用'fallbackfonts'选项。 (请参阅软件包中的starter_fallback.php示例或http://www.pdflib.com/en/pdflib-cookbook/fonts/starter-fallback/)在这种情况下,您可以指定一种字体,其中也应该搜索缺少的字形。 – Rainer