首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docverter在减价-> pdf上丢失utf-8编码

Docverter在减价-> pdf上丢失utf-8编码
EN

Stack Overflow用户
提问于 2013-07-25 18:16:12
回答 1查看 1.2K关注 0票数 2

当我试图使用Docverter (通过API)将utf-8编码的标记文件转换为pdf时,我只会丢失非ASCII字符。

有什么解决办法吗?

我想转换.md -> .pdf。也许Docverter可以帮助做.md -> .html,那么我可以为.html -> .pdf使用其他的库/服务吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中。

因此,我最终采用了以下方法:

  1. 使用Docverter转换.md -> html
  2. 处理生成的html,使其使用HTML实体而不是utf-8。
  3. 再次使用Docverter转换.html -> .pdf

如果您碰巧使用python,那么步骤2很容易。在本例中,下面的行可以实现此目的:

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17865730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档