【问题标题】:How do I use Extended ASCII characters in a PHP/PDF document generated by FPDF?如何在 FPDF 生成的 PHP/PDF 文档中使用扩展 ASCII 字符?
【发布时间】:2018-06-17 22:51:08
【问题描述】:

我正在尝试创建一个包含扩展 ASCII 字符的文档。对于来自客户端的文本,以下工作:

// Convert from UTF-8 to ISO-8859-1 - Deal with Spanish characters
setlocale(LC_ALL, 'en_US.UTF-8');
foreach ($_POST as $key => $value){
    $post[$key] = iconv("UTF-8", "ISO-8859-1", $value);
}

$pdf->Cell(0, 0, $post["Name"], 0, 1);

但是,我无法让 PHP 文件中的文本正常工作。例如:

$name = "José";

我不知道变量使用什么编码。结果,我无法将其转换为 ISO-8859-1。 é 被破坏了。

编辑: 我正在重写一个生成 PDF 文档的程序(有些是西班牙语)。如果我从现有 PDF 中复制文本,我会得到以下信息:(在 PDF 文档和 IDE 中看起来很正常,但无法使用 FPDF 使用 CP1252 或 ISO-8859-1 字体打印)。

$Name = "José" // Jos\x65\xcc\x81 - I have no idea what encoding is used for the é

将扩展字符改为UTF-8即可解决问题:

$Name = "José" // Jos\xC3\xA9  - UTF-8
  1. 有谁知道我从现有 PDF 中复制了哪种编码?
  2. 有没有办法将其转换为 UTF-8?
  3. 用户可以在浏览器中输入这些内容吗?

当我将 UTF-8 编码字符转换为 ISO-8859-1 以输出到 FPDF 时,PDF 包含 é 的三个字符编码版本。

第二次编辑: Unicode equivalence from Wikipedia

Unicode 提供了两个概念,规范等价和 兼容性。规范定义的代码点序列 假定等效项具有相同的外观和含义 打印或显示。例如,代码点 U+006E(拉丁 小写“n”)后跟 U+0303(组合波浪号“◌̃”)是 由 Unicode 定义为规范地等效于单个代码 点 U+00F1(西班牙字母表的小写字母“ñ”)。 因此,这些序列应该以相同的方式显示, 应通过应用程序以相同的方式处理,例如 按字母顺序排列名称或搜索,并且可以替换每个 其他。

解释@smith 的评论,我只需要获取 TCPDF 或可以正确处理 UTF-8 的东西,这是很长的路要走。应该注意的是,我在 PHP 的 iconv 中遇到了错误,所以我不完全确定是否可以通过切换到 TCPDF 来消除它。

【问题讨论】:

  • 我使用 TCPDF 的原因之一是它出色的 utf-8 支持。
  • @smith 你能告诉我一些代码的例子,这些代码将带有扩展 ASCII 字符的局部变量发送到生成 pdf 文档的函数吗?
  • 我建议你改用更好的 pdf 生成库 TCPDF。 tcpdf.org
  • @smith 感谢您的指点。我认为问题出在 PHP 而不是 FPDF。结果证明是正确的。 TCPDF 似乎是一个更好的包,有更好的例子。我从他们的示例中复制了文本,它起作用了!显然我使用的 é 不是 UTF-8。
  • @smith 你能检查一下三字节编码是否适用于 TCPDF?

标签: php character-encoding fpdf extended-ascii


【解决方案1】:

事实证明,要使用扩展的 ASCII 字符,需要选择和编码并在整个过程中使用它。就我而言,我使用 UTF-8 编码字符并在任何地方使用它们。我最初的问题源于我从以规范等效格式编码的 PDF 文档中复制文本时的错误。一旦我到处使用 UTF-8 编码字符,我的问题就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多