使用 PDFlib + PHP 在 PDF 中生成重音符号和 ç
Generate accents and ç in PDF with PDFlib + PHP
我编写了以下代码来传递一个字符串,它以 pdf 格式生成了我的行:
function text_block($p,$text,$xcrd,$ycrd)
{
$font_size=24; //font size, used to space lines on y axis
$tmplines = explode("\n",$text);
for($j=0;$j<count($tmplines);$j++){
$tmptxt = explode(" ",$tmplines[$j]);
$str="";
for($i=0;$i<count($tmptxt);$i++){
if($str=="")
$str=sprintf("%s",$tmptxt[$i]);
else
$str=sprintf("%s %s",$str,$tmptxt[$i]);
if((strlen($str)*$font_size + strlen($tmptxt[$i+1])*$font_size) > 1512){
$p->fit_textline($str,$xcrd,$ycrd,"");
$str="";
$ycrd-=$font_size;
}
}
$p->fit_textline($str,$xcrd,$ycrd,"");
$ycrd-=$font_size;
}
return $ycrd;
}
因为当我在 PDF 中传递诸如“é”或“ç”之类的内容时,会出现奇怪的字符“É”。
我该如何解决这个问题?
例子
生成带有重音符号的 PDF?
$p = new PDFlib();
$p->set_option("stringformat=utf8");
$name_file = "wp-content/uploads/".$current_user->ID."_".$time."_mysite.pdf";
if ($p->begin_document($name_file, "") == 0) {
die("Error: " . $p->get_errmsg());
}
$p->set_info("Creator", "mysyte.com.br");
$p->set_info("Author", $current_user->username);
$p->set_info("Title", "title");
$y = 2138;
$x = 1512;
$p->begin_page_ext($x, $y, "");
$y -= 100;
$y = text_block($p, "A data é: ".date("d/m/Y", $time), 50, $y);
$p->end_page_ext("");
$p->end_document("");
会出现在 pdf 中,类似于 "A data é: 03/23/2016",但是当我放置 bla 拉伸时它挂在 php 中并且不会 return 错误,或生成 PDF,ne 做任何事情.不知道是不是缺少安装什么东西,或者是什么东西的配置,或者你必须启用什么东西。
参考资料
这个例子"Example 10-6. Font demonstration"这个site做我想做的,但是我不能做我的.php,首先是因为我没有pdflib.upr
文件它通过pdf_set_parameter
.
其次因为没看懂他在干什么就行:
pdf_continue_text($p,"$f (".chr(128)." Ç à á â ã ç è é ê)");
就像这行一样,如果我开始工作 fit_textline
更新
我在另一个页面上试过php相似的代码很低。
try {
$p = new PDFlib();
if ($p->begin_document("wp-content/uploads/hello.pdf", "") == 0) {
die("Error: " . $p->get_errmsg());
}
$p->set_info("Creator","hello.php");
$p->set_info("Author","Rasmus Lerdorf");
$p->set_info("Title","Hello world (PHP)");
$p->set_parameter("FontOutline", "Ubuntu=/var/www/html/wordpress/wp-includes/fonts/ubuntu-font-family/Ubuntu-C.ttf");
$p->set_parameter("textformat", "utf8");
$y = 2138;
$x = 1512;
$p->begin_page_ext($x, $y, "");
$p->set_text_pos(25,750);
$font = $p->findfont("Ubuntu", "unicode", "");
$font_size=24.0; //font size, used to space lines on y axis
$p->setfont($font, $font_size);
$p->continue_text("(".chr(128)." Ç à á â ã ç è é ê)");
$p->end_page_ext("");
$p->end_document("");
}catch (\PDFlibException $e) {
die("PDFlib exception occurred in hello sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
$e->get_errmsg() . "\n");
}catch (\Exception $e) {
die($e);
}
但它仍然没有生成我的 pdf,而且服务器上的 500 错误也没有显示错误的输出,因为我已经用 try catch 进行了处理。
用过 PDFlib 的人知道怎么做吗?设置一个外部来源并将文本类型设置为 utf8,即它适用于重音符号和 ç?
首先:为什么不使用文本流(PDFlib 的多行功能)创建多行输出?
现在你的错误输出:
- 我猜你有“É”(这是 utf-8
输入字符串中“é”的两个字节表示,但您尚未将 PDFlib 中的文本格式设置为 utf-8。文本格式应与您应用的输入字符串匹配。
你可以使用这个:
try {
$p = new PDFlib();
if ($p->begin_document("wp-content/uploads/katleia.pdf", "") == 0) {
die("Error: " . $p->get_errmsg());
}
$p->set_info("Creator","hello.php");
$p->set_info("Author","Rasmus Lerdorf");
$p->set_info("Title","Hello world (PHP)");
$p->set_parameter("textformat", "utf8");
$y = 2138;
$x = 1512;
$p->begin_page_ext($x, $y, "");
$p->set_text_pos(25,750);
$font = $p->load_font("Helvetica-Bold", "winansi", "");
$font_size=24.0; //font size, used to space lines on y axis
$p->setfont($font, $font_size);
$p->continue_text("( Ç à á â ã ç è é ê)");
$p->end_page_ext("");
$p->end_document("");
}catch (\PDFlibException $e) {
die("PDFlib exception occurred in hello sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
$e->get_errmsg() . "\n");
}catch (\Exception $e) {
die($e);
}
我编写了以下代码来传递一个字符串,它以 pdf 格式生成了我的行:
function text_block($p,$text,$xcrd,$ycrd)
{
$font_size=24; //font size, used to space lines on y axis
$tmplines = explode("\n",$text);
for($j=0;$j<count($tmplines);$j++){
$tmptxt = explode(" ",$tmplines[$j]);
$str="";
for($i=0;$i<count($tmptxt);$i++){
if($str=="")
$str=sprintf("%s",$tmptxt[$i]);
else
$str=sprintf("%s %s",$str,$tmptxt[$i]);
if((strlen($str)*$font_size + strlen($tmptxt[$i+1])*$font_size) > 1512){
$p->fit_textline($str,$xcrd,$ycrd,"");
$str="";
$ycrd-=$font_size;
}
}
$p->fit_textline($str,$xcrd,$ycrd,"");
$ycrd-=$font_size;
}
return $ycrd;
}
因为当我在 PDF 中传递诸如“é”或“ç”之类的内容时,会出现奇怪的字符“É”。
我该如何解决这个问题?
例子
生成带有重音符号的 PDF?
$p = new PDFlib();
$p->set_option("stringformat=utf8");
$name_file = "wp-content/uploads/".$current_user->ID."_".$time."_mysite.pdf";
if ($p->begin_document($name_file, "") == 0) {
die("Error: " . $p->get_errmsg());
}
$p->set_info("Creator", "mysyte.com.br");
$p->set_info("Author", $current_user->username);
$p->set_info("Title", "title");
$y = 2138;
$x = 1512;
$p->begin_page_ext($x, $y, "");
$y -= 100;
$y = text_block($p, "A data é: ".date("d/m/Y", $time), 50, $y);
$p->end_page_ext("");
$p->end_document("");
会出现在 pdf 中,类似于 "A data é: 03/23/2016",但是当我放置 bla 拉伸时它挂在 php 中并且不会 return 错误,或生成 PDF,ne 做任何事情.不知道是不是缺少安装什么东西,或者是什么东西的配置,或者你必须启用什么东西。
参考资料
这个例子"Example 10-6. Font demonstration"这个site做我想做的,但是我不能做我的.php,首先是因为我没有pdflib.upr
文件它通过pdf_set_parameter
.
其次因为没看懂他在干什么就行:
pdf_continue_text($p,"$f (".chr(128)." Ç à á â ã ç è é ê)");
就像这行一样,如果我开始工作 fit_textline
更新
我在另一个页面上试过php相似的代码很低。
try {
$p = new PDFlib();
if ($p->begin_document("wp-content/uploads/hello.pdf", "") == 0) {
die("Error: " . $p->get_errmsg());
}
$p->set_info("Creator","hello.php");
$p->set_info("Author","Rasmus Lerdorf");
$p->set_info("Title","Hello world (PHP)");
$p->set_parameter("FontOutline", "Ubuntu=/var/www/html/wordpress/wp-includes/fonts/ubuntu-font-family/Ubuntu-C.ttf");
$p->set_parameter("textformat", "utf8");
$y = 2138;
$x = 1512;
$p->begin_page_ext($x, $y, "");
$p->set_text_pos(25,750);
$font = $p->findfont("Ubuntu", "unicode", "");
$font_size=24.0; //font size, used to space lines on y axis
$p->setfont($font, $font_size);
$p->continue_text("(".chr(128)." Ç à á â ã ç è é ê)");
$p->end_page_ext("");
$p->end_document("");
}catch (\PDFlibException $e) {
die("PDFlib exception occurred in hello sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
$e->get_errmsg() . "\n");
}catch (\Exception $e) {
die($e);
}
但它仍然没有生成我的 pdf,而且服务器上的 500 错误也没有显示错误的输出,因为我已经用 try catch 进行了处理。
用过 PDFlib 的人知道怎么做吗?设置一个外部来源并将文本类型设置为 utf8,即它适用于重音符号和 ç?
首先:为什么不使用文本流(PDFlib 的多行功能)创建多行输出?
现在你的错误输出:
- 我猜你有“É”(这是 utf-8 输入字符串中“é”的两个字节表示,但您尚未将 PDFlib 中的文本格式设置为 utf-8。文本格式应与您应用的输入字符串匹配。
你可以使用这个:
try {
$p = new PDFlib();
if ($p->begin_document("wp-content/uploads/katleia.pdf", "") == 0) {
die("Error: " . $p->get_errmsg());
}
$p->set_info("Creator","hello.php");
$p->set_info("Author","Rasmus Lerdorf");
$p->set_info("Title","Hello world (PHP)");
$p->set_parameter("textformat", "utf8");
$y = 2138;
$x = 1512;
$p->begin_page_ext($x, $y, "");
$p->set_text_pos(25,750);
$font = $p->load_font("Helvetica-Bold", "winansi", "");
$font_size=24.0; //font size, used to space lines on y axis
$p->setfont($font, $font_size);
$p->continue_text("( Ç à á â ã ç è é ê)");
$p->end_page_ext("");
$p->end_document("");
}catch (\PDFlibException $e) {
die("PDFlib exception occurred in hello sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
$e->get_errmsg() . "\n");
}catch (\Exception $e) {
die($e);
}