2016-03-28 88 views
0

在移動瀏覽器上生成pdf文件時,我遇到了以下問題:在某些移動瀏覽器中文件被損壞,但某些文件被下載但未顯示文本,它只在文件中顯示圖像。同時,在桌面瀏覽器上工作時文件生成得很完美,並且下載時文件內容完美顯示。我不知道背後的真實原因,因爲我在開發Web應用程序方面是全新的。在移動瀏覽器上工作時生成pdf文件時出現問題

我使用的代碼在下面給出:

Document pdfDoc = new Document(PageSize.A4, 10, 10, 10, 10); 
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc,   Response.OutputStream); 
pdfDoc.Open(); 
string imageUrl = Server.MapPath("~/logo//bcetlogo.jpg"); 
iTextSharp.text.Image ImageLogo = iTextSharp.text.Image.GetInstance(imageUrl); 
ImageLogo.ScaleToFit(80f, 80f); 
pdfDoc.Add(ImageLogo); 
Font f = FontFactory.GetFont("Arial", 15); 
string title = "HelloWorld"; 
Paragraph text1 = new Paragraph(title, f); 
pdfDoc.Add(text1); 
pdfWriter.CloseStream = false; 
pdfWriter.Close(); 
Response.Buffer = true; 
Response.ContentType = "application/octet-stream"; 
Response.AddHeader("Content-Disposition", "attachment;filename=Example.PDF"); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Write(pdfDoc); 
Response.End(); 
+0

親愛的@AbhinandanKumar,是我的回答的事情嗎?你有沒有機會嘗試提出的解決方案?它對你有幫助嗎? –

回答

1

這肯定是錯誤的:

Response.Write(pdfDoc); 

pdfDoc目的是Document類型的,並且預計Response.Write()字節,而不是一個對象Document。你聲稱這在某些情況下是行不通的。

您還需要去掉這兩行:

pdfWriter.CloseStream = false; 
pdfWriter.Close(); 

這一行替換它們:

pdfDoc.Close(); 

瞭解更多關於這裏的PDF創建過程中的5個步驟:Getting started。你從哪裏得到你的代碼?你能保證永遠不再看這個文檔嗎?始終使用official web site

當您完成pdfDoc.Close()時,PDF已完成。收聽Document的所有DocListener實例都關閉。在您的情況下,偵聽pdfDoc的實例DocListener是您不知道的PdfDocument實例,因爲它僅在內部使用。關閉這個PdfDocument實例很重要,因爲在那個close()操作中,大量內容被刷新。您可以通過關閉pdfWriter而不是pdfDoc來跳過此步驟。

您還保持內容流打開。這是一個壞主意。內容流應該關閉。直接使用Response.OutputStream時存在一些已知問題。這是更好地使用MemoryStream像答案是做這樣一個問題:iTextSharp is producing a corrupt PDF with Response

如果你研究這個答案很好,你會看到這一點:

byte[] bytes = memoryStream.ToArray(); 
Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("Content-Disposition", "attachment;filename=ControleDePonto.pdf"); 
Response.Buffer = true; 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.BinaryWrite(bytes); 
Response.End(); 

正如你可以看到你所需要的BinaryWrite()方法該方法預計byte[]。除了代碼中的許多其他錯誤,您的主要錯誤是您將Document對象傳遞給Write()方法。

相關問題