【问题标题】:Is there any 8-bit single byte character encoding, that includes russian (cyrillic) and german chars? (usage: fpdf)是否有任何 8 位单字节字符编码,包括俄语(西里尔文)和德语字符? (用法:fpdf)
【发布时间】:2014-11-13 21:40:52
【问题描述】:

我正在开发一个基于 fpdf 的项目,但由于使用特殊字符而遇到了麻烦。 我知道 fpdf 不支持任何 utf8 并且我必须构建自己的字体才能使用特殊字符。 这已经适用于使用 iso-8859-5 编码的 russian chars 以及带有一些其他编码的 german characters

但是是不是没有我可以使用的编码同时支持两者?

除此之外: 这是一个已经在使用 fpdf 的非常古老的大型项目。我知道还有其他版本,比如mpdf等,可以处理utf8,但是如果除了更换整个系统还有其他解决方案,我真的很想这样做。

感谢您的帮助!

【问题讨论】:

    标签: encoding character-encoding fpdf


    【解决方案1】:

    没有这样的单一编码。

    我找到的最接近的是CP771,它同时支持立陶宛语和俄语,但首先:它不能解决你的问题,其次:它不会被任何东西支持。

    您可以为两种语言定义单独的字体,我认为这是最简单的方法。

    按照http://fpdf.de/tutorials/7/ 的教程,我想这会奏效:

    MakeFont('comic.ttf','comicDE.afm','cp1252');
    MakeFont('comic.ttf','comicRU.afm','iso-8859-5');
    

    然后:

    $pdf->AddFont('ComicDE','','comicDE.php');
    $pdf->AddFont('ComicRU','','comicRU.php');
    

    当然,这需要您对文本进行编码并将其添加到 PDF 中,具体取决于它所使用的语言,但我认为这是库的限制,无论如何都很难以不同的方式克服。

    【讨论】:

    • 感谢您的回复。恐怕你是对的,没有比使用不同的字体文件更好的解决方案了。非常糟糕,因为我们在一个文件中使用两种语言,所以我们需要分隔几乎每个单词,但至少它可以工作。
    【解决方案2】:

    我已经像这样扩展了 FPDF,它似乎可以很好地处理 UTF8 输入:

    class PDF extends FPDF {
    
        function Cell( $w, $h = 0, $t = '', $b = 0, $l = 0, $a = '', $f = false, $y = '' ) {
    
            parent::Cell( $w, $h, iconv( 'UTF-8', 'windows-1252', $t ), $b, $l, $a, $f, $y );
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      相关资源
      最近更新 更多