2009-02-06 161 views
2

我正在將HTML內容導出爲PDF。文件不以'%PDF-'開頭

System.IO.StringWriter sWriter = new System.IO.StringWriter(); 

    System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(sWriter); 

    Response.Buffer = true; 
    FormId.RenderControl(htmlWriter); 
    Response.ContentType = "application/pdf"; 
    // Added appropriate headers 
    Response.AddHeader("Content-Disposition", "inline; filename=XXX.pdf"); 
    Response.AddHeader("Content-Length", htmlWriter.ToString().Length.ToString()); 
    Response.Output.Write(sWriter.ToString()); 

    Response.Flush(); 
    Response.Close(); 

FormId是內容的我事業部過去..

我得到的錯誤是「文件不以%pdf-開始」

我已經包括Response.clear( );輸出不是

+0

sWriter實際上是否給你一個有效的PDF文件?檢查它的前四個字節。 – paxdiablo 2009-02-06 05:29:01

回答

3

你正在渲染出輸出流中的pdf之前的html(div,如你所說),所以兩者合併。這導致任何查看輸出的應用程序將其解釋爲損壞的文件。我會嘗試刪除前兩行:

Response.Buffer = true; 
FormId.RenderControl(htmlWriter); 

如果不解決這個問題,之前的一切添加Response.Clear()調用。

這是假設sWriter在此代碼塊的開頭包含PDF - 如果沒有,多一點上下文可能會有所幫助。

一些建議:如果可能的話,將其移出頁面到.ashx或其他IHttpHandler。

+0

好建議,http處理程序的開銷遠低於頁面處理程序。 – 2009-02-06 04:32:59

0

在開始流式輸出之前,請執行Response.Clear()。

1

我在將一些HTML內容寫入PDF時遇到同樣的問題。

我終於發現無效的HTML內容導致此問題。

例如,<ul>標籤沒有關閉標籤</ul>

一旦我把正確的結束標籤,它工作正常!