2013-07-25 28 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