2016-04-01 13 views
1

Günaydın, itextsharp kütüphanesini kullanarak mevcut sayfayı bir pdf'ye kaydetmeme izin ver ve sonra içindeki geçici bir klasöre kaydet site otomatik olarak. Ancak, yapmaya devam ettiği tek şey, dosyayı indirmeyi veya kaydetmem için bana tarayıcıyı tetiklemeyi sürdürmesiydi. Dosya bir geçici klasörde zaten kayıtlı, ben sadece bu tarayıcı iletişim indirme bir şekilde devre dışı bırakmak istiyorum. tavsiye lütfen. Herhangi bir yardım gerçekten takdir edilmektedir. Eğeritextsharp - sayfayı PDF'ye dönüştür ve otomatik olarak bir indirme iletişim kutusu açmadan geçici bir klasöre kaydetme

HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=RequestSummaryReport.pdf"); 
    HttpContext.Current.Response.Charset = ""; 
    HttpContext.Current.Response.ContentType = "application/pdf"; 

    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 

    iTextSharp.text.Document pdfDocument = new iTextSharp.text.Document(PageSize.A3, 45, 5, 5, 5); 
    //PdfWriter writer = PdfWriter.GetInstance(pdfDocument, Response.OutputStream); 
    PdfWriter writer = PdfWriter.GetInstance(pdfDocument, new FileStream(Server.MapPath("~/temps/") + "mypdf.pdf", FileMode.CreateNew)); 

    pdfDocument.Open(); 

    HtmlPipelineContext htmlContext = new HtmlPipelineContext(null); 
    htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 
    ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false); 

    IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(pdfDocument, writer))); 

    XMLWorker worker = new XMLWorker(pipeline, true); 
    XMLParser xmlParse = new XMLParser(true, worker); 

    this.Page.RenderControl(htw); 
    StringReader sr = new StringReader(sw.ToString()); 
    xmlParse.Parse(sr); 
    xmlParse.Flush(); 
    pdfDocument.Close(); 
    //Response.Write(pdfDocument); 
    Response.End(); 
+0

sen (imzalı) tam yöntemini gönderir misiniz: Eğer aşağıdaki kod satırını kaldırırsanız

, tarayıcı dosyayı kaydetmek için ister olmasın? Geri dönmek istediğinize bağlı olarak Response.ContentType'ı "application/json" veya "application/pdf" yerine "application/pdf" olarak değiştirmek isteyebilirsiniz. Ayrıca, üstbilgiyi değiştirmeniz gerekir. Önce HttpContext ile başlayan her şeyi kaldırmayı deneyin (ilk 4 satır). –

+0

@JorgeZuverza ile, tam yöntem imzasının amacınızı belirlemeye yardımcı olacağına katılıyorum. – iCode

+0

Daha iyi sorular yazmak için bir ipucu: "hepinize günaydın" ı (geç öğleden sonralarımda yazdınız), "lütfen tavsiye edin", "herhangi bir yardımın takdir edilmesi" vb. kişi, ama teknik bir Soru-Cevap sitesinde aslında tam tersi: kabarık sözler, daha az kibar olarak karşımıza çıkıyor çünkü bu, sesi ekliyor ve okuyucunun zamanını harcıyor. –

cevap

1

Yani sunucuda kaydetmek ister teşekkür? Kullanıcının kaydetmesini istemeden pdf'yi tarayıcıya görüntülemek ister misiniz? Belki de SO this önceki cevabın cevabı yardımcı olabilir. Davranışın tarayıcıya bağlı olarak değişebileceğini hatırlıyorum (IE, Chrome, Firefox, Safari). Kullanırken: Tarayıcı tarayıcıya pdf oluşturmaya çalışacaktır.

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=RequestSummaryReport.pdf"); 
+0

pdf zaten sunucuya kaydediliyor. Sayfanın herhangi bir şeyi açmasını veya PDF'yi açmayı denemesini istemiyorum. Şu anda tarayıcıya göndermeyi ve açmayı deniyor. Yapmak istemediğim şey budur. teşekkür ederim iCode – user3731575

+0

PDF'de tarayıcıda render istemiyorsanız, belki de HttpContext.Response.AddHeader için kod satırına sahip olmanız gerekmez, bu da kaydetme istemine neden olur. Ayrıca, içerik türünü uygulama/pdf'den, PDF olmayan herhangi bir şeye değiştirin. – iCode

+0

pdf olarak kaydetmek istiyorum sadece tarayıcıyı denemek istemiyorum ve açmayı deneyin – user3731575

İlgili konular