【问题标题】:Generate accents and ç in PDF with PDFlib + PHP使用 PDFlib + PHP 在 PDF 中生成重音符号和 ç
【发布时间】:2016-07-09 18:30:57
【问题描述】:

我编写了以下代码来传递一个字符串,它会在 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 中并且不返回错误或生成 PDF 时,不做任何事情。我不知道是否缺少安装一些东西,或者是一些东西的配置,或者你必须启用一些东西。

参考

示例“示例10-6.字体演示”这个site做我想做的,但我不能在我的.php中做,首先因为我没有pdflib.upr文件它通过pdf_set_parameter

二是因为没看懂他在做什么就行了:

 pdf_continue_text($p,"$f (".chr(128)." Ç à á â ã ç è é ê)");

如果我转到功能fit_textline

更新

我在另一个页面上尝试过 php 类似的代码 ai 低。

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,即它适用于重音和ç?

【问题讨论】:

  • "c" 是一个常规字符,应该从不成为问题。您显示的字符串具有 UTF8 编码的所有标记。而且 PDF 不支持 UTF8 编码的文本。

标签: php pdf pdflib


【解决方案1】:

你可以用这个:

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);
}

【讨论】:

    【解决方案2】:

    首先:为什么不使用 textflow(PDFlib 的多行功能)来创建多行输出?

    现在你的错误输出:

    • 我猜你有“é”(即 utf-8 输入字符串中“é”的两个字节表示),但您尚未将 PDFlib 中的文本格式设置为 utf-8。文本格式应与您应用的输入字符串匹配。

    【讨论】:

    • 你能给出一个完整的生成pdf的例子吗?
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2021-08-26
    • 2012-11-08
    相关资源
    最近更新 更多