2012-08-08 128 views
17

我使用wkhtmltopdf将html页面导出为pdf,但它似乎与捷克字符有问题...我将整个html加载到变量中,然后更改编码并像这样运行wkhtmltopdf:wkhtmltopdf - 编码问题

$html = ob_get_clean(); 
$html = iconv("UTF-8","Windows-1250", $html); 
file_put_contents('../export.php', $html); 

$commandString = WKHTML_LIB.'http://www.estiroad.com/export.php sestava.pdf'; 
exec($commandString); 

.html文件具有正确的编码,但即使我设置任何想法--encoding窗口-1250参数字符串命令,它只是不工作...谢谢...

编辑: 我解决了这个问题!美中不足的是在不断WKHTML_LIB,这是我在页面的开头定义:

define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf-amd64"); 

我只写了直接给exec路径();命令,现在它甚至可以使用标志。对不起,打扰你这样一个平凡... 现在$的CommandString线看起来是这样的:

$commandString = '"../wkhtmltopdf/wkhtmltopdf-amd64" --print-media-type --page-size A4 -R  50 --encoding windows-1250 --header-html header.html --margin-top 10mm --margin-bottom 10mm --margin-left 10mm --margin-right 10mm http://www.estiroad.com/export.php sestava.pdf'; 
+0

http之前应该有空格吗? 'WKHTML_LIB。'http:/' – Cups 2012-08-08 08:53:16

+0

它不应该,但它不会影响它是否存在或不存在。命令执行时没有问题,pdf生成,但它被错误地编码....例如,而不是“ř” “有”ø“... – 2012-08-08 08:58:28

+0

对不起,评论删除了... – Cups 2012-08-08 09:22:09

回答

5

我解决这个问题!美中不足的是在不断WKHTML_LIB,这是我在页面的开头定义:

define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf-amd64"); 

我只写了直接给exec路径();命令,现在它甚至可以使用标志。对不起,打扰你这样一个平凡...现在$的CommandString线看起来是这样的:

$commandString = '"../wkhtmltopdf/wkhtmltopdf-amd64" --print-media-type --page-size A4 -R  50 --encoding windows-1250 --header-html header.html --margin-top 10mm --margin-bottom 10mm --margin-left 10mm --margin-right 10mm http://www.estiroad.com/export.php sestava.pdf'; 
+0

可能在原始解决方案中,它缺少引号内的引号,以便它们在插入到命令字符串时出现。像''有空间和东西的一些路径''。 – userfuser 2014-04-29 21:11:26

0

我也有类似的问题,wkhtmltopdf在中国的字符没有正确地呈现面前。我已经通过安装适当的中文字体解决了这个问题。

任何机会,你必须安装任何捷克相关字体的字符才能正确渲染?由于我不熟悉捷克文字/字体,我不确定这是否适用。希望这可以帮助。

+0

我认为这不会帮助...几乎所有我安装的字体都支持捷克字符,另外,如果远程用户想要显示pdf,这不会解决问题...:/ – 2012-08-08 09:29:56

+0

顺便说一句:special czech人物是:,ď,ň,ó,ě,š,è,ř,ž,á,í,é,ú,ú。 – 2012-08-08 09:31:06

+0

是否有任何原因需要转换为从UTF-8编码为Windows-1250? 此外,也许尝试使用iconv与// IGNORE追加到out_charset参数。也许还可以尝试mb_convert_encoding。 – 2012-08-08 09:45:59

0

刚才我对你提供的那些角色进行了测试,他们对我来说工作得很好。 Win7,wkhtmltopdf 0.11.0 rc2。作品封面,toc,书签,内容和标题。还测试了韩国和中国的字符,甚至他们的工作。

PDF使用(删除文件位置) --print-media-type --page-size A5 --header-html header.html --footer-html footer.html --margin-bottom 10mm --margin-top 10mm --margin-left 10mm --margin-right 10mm cover cover.html toc --xsl-style-sheet tocfile.xsl temp.html temp.pdf

temp.html极其无效XHTML生成,第一行说<?xml version="1.0" encoding="iso-8859-1"?>。 temp.html文件是用C#使用UTF-8写入磁盘的,并且可以工作。我真的建议尽可能使用UTF-8。

Screenshot of generated PDF

+0

我试过了你的命令,但它只是不会工作:((它像添加的参数被忽略...即使我改变了例如margin-top值,它也不起作用 – 2012-08-08 11:10:02

+0

嗯,我只是再次测试,并将我的保证金从10mm改为20mm,它可以工作,您可以发布'$ commandString'和你的源HTML的某处,以便我可以准确地测试你的材料?有一件事是尝试直接使用wkhtmltopdf而不是从php。如果你可以提供源代码和确切的命令,我会尝试在这里复制问题 – Nenotlep 2012-08-08 11:28:47

+0

现在我试图直接运行它,并且标志正在工作,甚至编码工作......任何想法如何强制它从PHP运行?我不能直接运行它,因为我需要每个用户都能够o一键生成PDF,不下载wkhtml ... – 2012-08-08 11:47:13

42

以供将来参考:

我曾与德国的变音符号同样的问题。

当我加入

<meta charset="UTF-8" /> 

到HTML页面的问题得到解决。

这当然是以你的页面作为utf-8为前提的。

+1

很高兴这是我在解决我的问题时阅读的第一件事:D – joevallender 2018-02-02 11:04:12