2013-07-25 52 views
2

当我尝试使用Docverter(通过API)将utf-8编码的markdown文件转换为pdf时,我只丢失了非ASCII字符。Docverter在markdown上丢失utf-8编码 - > pdf

任何解决方案?

我想转换.md - > .pdf。也许Docverter可以帮助.md - > .html,然后我可以使用一些其他库/服务为.html - > .pdf?

回答

1

更新(14/10/2013)

问题与Docverter is now solved布尔选项,所以你现在可以直接转换从mdpdf,传递选项ascii=true到Docverter。这会导致中间HTML使用实体而不是utf-8,因此生成的pdf可以。

原来的答复

大量的调查研究后,(我也有同样的问题),我发现的bug是由Docverter作出的HTML的“PDF转换,它采用飞碟库。即使字符集在meta标记中正确设置为utf-8,此转换也会忽略HTML输入中的任何非ASCII字符。

但是,如果HTML包含实体,如ó等,然后飞碟确实包括那些字符,并且假定其具有正确的编码(库所使用默认字体是细),则适当的炭的字体(ó在这个例子)显示在最终的pdf中。

所以我结束了以下方法:

  1. 使用Docverter转换.md - 生成的html使用HTML实体,而不是UTF-8
  2. 使用Docverter的>html
  3. 过程再次转换.html - >.pdf

第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接受这迫使如在步骤2中获得。然而所述一个它以产生HTML开关--ascii ,Docverter解析器用于布尔选项seems to be broken,所以不可能将选项ascii传递给Docverter。

+0

谢谢!似乎是一个很好的解决方案,我会尝试。 – lajarre