代码之家  ›  专栏  ›  技术社区  ›  JSWilson

如何在由fpdf生成的php/pdf文档中使用扩展的ascii字符?

  •  0
  • JSWilson  · 技术社区  · 6 年前

    我正在尝试创建一个包含扩展的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中,这看起来很正常,但不能使用CP1252或ISO-8859-1字体使用fpdf打印)。

    $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来消除错误。

    1 回复  |  直到 5 年前
        1
  •  0
  •   JSWilson    5 年前

    结果表明,要使用扩展的ASCII字符,需要选择和编码并在整个过程中使用它。在我的例子中,我使用了UTF-8编码字符,并在任何地方使用它们。我最初的问题源于我从一个PDF文档中复制文本的错误,该文档是以标准的等效格式编码的。一旦我使用了utf-8编码字符,我的问题就消失了。