2016-03-28 26 views
0

Mobil tarayıcıda pdf dosyaları oluştururken aşağıdaki sorunla karşı karşıya kaldım.Veri dosya indirildiyse ancak metin görüntülemedeyken dosya bazı mobil tarayıcılarda bozuk Dosyada sadece görüntülerin görüntülendiğini görüyoruz. Bu arada dosya, masaüstü tarayıcılarda çalışırken mükemmel bir şekilde oluşturuldu ve dosya içeriği, indirildiğinde mükemmel bir şekilde görüntülendi. Web uygulamalarını geliştirmede tamamen yeni olduğum için bunun arkasındaki gerçek sebebi bilmiyorum. Bu kesinlikle yanlıştırBir mobil tarayıcıda çalışırken pdf dosyalarını oluştururken sorun

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

Sevgili @AbhinandanKumar, cevabımla ilgili bir şey miydi? Önerilen çözümü denemek için bir şansın var mı? Sana yardım etti mi? –

cevap

1

:

kullandığım kod

aşağıda verilmiştir

Response.Write(pdfDoc); 

pdfDoc nesne türü Document ait olup Response.Write() bayt değil, bir Document nesneyi bekliyor. Bunun bazı durumlarda çalıştığına dair iddianız doğru olamaz.

Ayrıca şu iki satırı kaldırmak gerekir:

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

bu hat ile değiştirin:

pdfDoc.Close(); 

burada PDF oluşturma sürecinde 5 adımlar hakkında daha fazla bilgi: Getting started. Kodunuzu nereden aldınız? Bu belgelere bir daha asla bakmadığına söz verebilir misin? Her zaman official web site'u kullanın!

pdfDoc.Close()'u yaptığınızda, PDF son haline getirilir. Document dinleyen tüm DocListener örnekleri kapalı. Durumunuzda, pdfDoc dinleyen DocListener örneği, yalnızca içsel olarak kullanıldığından bilmediğiniz bir PdfDocument örneğidir. Bu PdfDocument örneğinin kapatılması önemlidir, çünkü bu close() işleminde bol miktarda içerik temizlenir. Bu adımı, pdfDoc yerine pdfWriter kapatarak atlayın.

Ayrıca içerik akışını açık tutuyorsunuz. Bu kötü bir fikir. İçerik akışı kapatılmalıdır. Doğrudan Response.OutputStream kullanırken bazı bilinen sorunlar vardır. Bunu iyi cevabı incelerseniz iTextSharp is producing a corrupt PDF with Response

, bunu göreceksiniz:

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(); 

Eğer BinaryWrite() yöntemi gerekir görebileceğiniz gibi bu sorunun cevabı yapılır gibi bir MemoryStream kullanmak daha iyidir ve bu yöntem bir byte[] bekler. Kodunuzdaki diğer birçok hatanın yanı sıra, ana hatanınız, Document nesnesini Write() yöntemine iletmenizdir.