2013-08-01 79 views
0

我使用iTextSharp將HTML轉換爲PDF並通過電子郵件發送。它工作正常,但似乎不支持「背景」風格。這是我用來解析HTMLiTextSharp - html到pdf與背景顏色的字體

 private MemoryStream createPDF(string html){ 
     MemoryStream msOutput = new MemoryStream(); 
     TextReader reader = new StringReader(html); 

     Document document = new Document(PageSize.A4, 30, 30, 30, 30); 

     PdfWriter writer = PdfWriter.GetInstance(document, msOutput); 

     HTMLWorker worker = new HTMLWorker(document); 

     document.Open(); 

     writer.CloseStream = false; 
     worker.StartDocument(); 

     worker.Parse(reader); 

     worker.EndDocument(); 
     worker.Close(); 
     document.Close(); 
     msOutput.Position = 0; 
     return msOutput; 
} 

代碼和HTML看起來是這樣的:

<p> 
Have you <span style="background:red;padding:0.1em 0;" title="This has been brought to your attention.">ever switched your electronic medical records vendor? If so...</span></p> 

這並不突出顯示文本,這是我想它。然而,使用「顏色:紅色」,工作,改變文本的顏色,但我需要它來突出顯示,像'背景'會做。

無論如何,我一直在尋找最後一天,找不到解決方案。這可能嗎?如果沒有,是否有一個庫支持這個?我也試過Pechkin庫,但同樣的事情發生。

+0

我不知道你是否已經看過關於Pechkin和背景顏色的FAQ,但是... https://github.com/gmanny/Pechkin#q-why-produced-pdf-lacks-background-images-and-colors (它應該幾乎被設置爲true,IMO) – tuespetre

回答

2

零工作正在完成HTMLWorker,所有工作都在單獨但相關的項目XMLWorker中完成,所以請移動到那個位置。然後,您可以非常然後只需插入這個而不是用HTMLWorker

//Bind a reader to our text 
using (TextReader reader = new StringReader(html)) { 
    //Parse the HTML and write it to the document 
    XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader); 
} 

側面說明,我真的建議不要傳遞一個MemoryStream左右,除非你真的需要,而是隻傳遞底層的字節數組左右。當週圍的原料流傳遞,你必須擔心的當前位置,檢查是否關閉的東西爲你等我建議改變你的方法是這樣的(也注意到using模式):

private byte[] createPDF(string html) { 
    //Basic PDF setup 
    using (var msOutput = new MemoryStream()) { 
     using (var document = new Document(PageSize.A4, 30, 30, 30, 30)) { 
      using (var writer = PdfWriter.GetInstance(document, msOutput)) { 

       //Open our document for writing 
       document.Open(); 

       //Bind a reader to our text 
       using (TextReader reader = new StringReader(html)) { 
        //Parse the HTML and write it to the document 
        XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader); 
       } 

       //Close the main document 
       document.Close(); 
      } 

      //Return our raw bytes 
      return msOutput.ToArray(); 
     } 
    } 
} 
+0

非常感謝。這工作。 – ygetarts