코드에서 단계를 건너 뛴 경우 ItextSharp 버전 5.5.1 및 XML Worker 버전 5.5.1을 사용하고 있는지 확실하지 않습니다. doc.Close는 "문서에 페이지가 없습니다"라는 예외를 throw하지만 sw.toString (HTML 내용 포함)을 보았습니다.손상된/빈 pdf를 반환하는 Itextsharp (XMLWorker)를 사용하여 Asp.net 페이지를 PDF로 변환
private void ExporttoPDF()
{
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);
var doc = new Document(PageSize.A3, 45, 5, 5, 5);
PdfWriter writer = PdfWriter.GetInstance(doc, Response.OutputStream);
doc.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(doc, writer)));
XMLWorker worker = new XMLWorker(pipeline, true);
XMLParser xmlParse = new XMLParser(true, worker);
pnlReport.RenderControl(htw);
StringReader sr = new StringReader(sw.ToString());
xmlParse.Parse(sr);
xmlParse.Flush();
doc.Close();
Response.Write(doc);
}
처음에는보기가 거의 올바른 것처럼 보입니다. 당신은 HTTP 응답 스트림에 직접 쓰고 있으므로'Response.Write (doc);'을 할 필요가 없다. (이 줄은 대부분 사람들이 어쨌든 그것을하는 것으로 간주하지 않는다.) 필자는 ASP.Net 서버가 없어서'StringReader sr = new StringReader ("Hello");로 시도해 보았고 올바르게 작동했습니다. –