当我试图使用Docverter (通过API)将utf-8编码的标记文件转换为pdf时,我只会丢失非ASCII字符。
有什么解决办法吗?
我想转换.md -> .pdf。也许Docverter可以帮助做.md -> .html,那么我可以为.html -> .pdf使用其他的库/服务吗?
发布于 2013-10-11 15:43:57
最新情况(2013年10月14日)
Docverter 现在解决了中布尔选项的问题,因此您现在可以从md直接转换为pdf,将选项ascii=true传递给Docverter。这导致中间HTML使用实体而不是utf-8,因此得到的pdf是可以的。
原始答案
经过大量的研究(我也遇到了同样的问题),我发现这个bug出现在Docverter进行的html->pdf转换中,Docverter使用的是Flying库。这种转换忽略了HTML输入中的任何非ascii char,即使字符集在meta标记中正确地设置为meta。
但是,如果HTML包含实体(如ó等),那么fine确实包含这些字符,并且假设字体具有正确的编码(库使用的默认字体很好),则适当的字符(在本例中为ó)显示在生成的pdf中。
因此,我最终采用了以下方法:
.md -> htmlhtml,使其使用HTML实体而不是utf-8。.html -> .pdf如果您碰巧使用python,那么步骤2很容易。在本例中,下面的行可以实现此目的:
def fixHTML(filename):
f = open(filename, "r")
content = unicode(f.read(), "utf-8") # Reads the file into a unicode string
f.close()
f = open(filename, "w")
f.write(content.encode("ascii", "xmlcharrrefreplace")) # Writes with the fixed encoding备注:这种复杂的方法不应该是必需的,因为pandoc接受开关--ascii,它强制它生成第2步中获得的--ascii。然而,用于布尔选项好像被打破了的Docverter解析器无法将选项ascii传递给Docverter。
https://stackoverflow.com/questions/17865730
复制相似问题