2015-02-03 5 views
0

pdf에서 일부 HTML을 변경하고 싶습니다. 내 HTML은 HTML 문자열이지만, 정확히 iTextSharp 내에 전달하는 법을 모르겠습니다.itextsharp html to pdf

public void PDF() 
     { 

      // Create a doc object 
      var doc = new doc(PageSize.A4, 50, 50, 25, 25); 

      // Create a new PdfWrite object, writing the output to the file ~/PDFTemplate/SimpleFormFieldDemo.pdf 
      var output = new FileStream(Server.MapPath("t.pdf"), FileMode.Create); 
      var writer = PdfWriter.GetInstance(doc, output); 

      // Open the doc for writing 
      doc.Open(); 

      //Add Wallpaper image to the pdf 
      var Wallpaper = iTextSharp.text.Image.GetInstance(Server.MapPath("hfc.png")); 
      Wallpaper.SetAbsolutePosition(0, 0); 
      Wallpaper.ScaleAbsolute(600, 840); 
      doc.Add(Wallpaper); 


      iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(doc); 
      StyleSheet css = new StyleSheet(); 
      css.LoadTagStyle("body", "face", "Garamond"); 
      css.LoadTagStyle("body", "encoding", "Identity-H"); 
      css.LoadTagStyle("body", "size", "12pt"); 

      hw.Parse(new StringReader(HTML)); 

      doc.Close(); 
      Response.Redirect("t.pdf"); 
     } 

누구나이 작업을하는 방법을 잘 알고 있다면 좋을 것입니다. 감사합니다. Dom

답변

6

The Best iText Questions on StackOverflow을 다운로드하십시오. 무료 전자 책이지만 혜택을 누릴 수 있습니다.

일단 다운로드했다면 "XML 및 XHTML 구문 분석"섹션으로 이동하십시오. 당신은 대신 XML 노동자의 HTMLWorker를 사용하는 RowSpan does not work in iTextSharp?

, 당신은 바로 다음과 같습니다 :

나를이 질문에 대한 답변에서 인용 할 수 있도록 허용 HTMLWorker는 CSS에 대한 지원이 없습니다. CSS가 작동하지 않는다고 말합니다. iTextSharp가 잘못되었습니다. HTMLWorker을 사용할 때는 작동하지 않지만 은 문서화되어 있습니다. 필요한 CSS는 XML Worker에서 작동합니다.

코드를 버리고 XML Worker를 사용하여 새로 시작하십시오.

이 책에는 많은 예제 (간단한 예제뿐만 아니라 복잡한 것도 포함)가 있습니다. 내가 당신에게 하나를 들어 보겠습니다 :

using (var fsOut = new FileStream(outputFile, FileMode.Create, FileAccess.Write)) 
    using (var stringReader = new StringReader(result)) 
    { 
     var document = new Document(); 
     var pdfWriter = PdfWriter.GetInstance(document, fsOut); 
     pdfWriter.InitialLeading = 12.5f; 
     document.Open(); 
     var xmlWorkerHelper = XMLWorkerHelper.GetInstance(); 
     var cssResolver = new StyleAttrCSSResolver(); 
     var xmlWorkerFontProvider = new XMLWorkerFontProvider(); 
     foreach (string font in fonts) 
     { 
      xmlWorkerFontProvider.Register(font); 
     } 
     var cssAppliers = new CssAppliersImpl(xmlWorkerFontProvider); 
     var htmlContext = new HtmlPipelineContext(cssAppliers); 
     htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 
     PdfWriterPipeline pdfWriterPipeline = new PdfWriterPipeline(document, pdfWriter); 
     HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, pdfWriterPipeline); 
     CssResolverPipeline cssResolverPipeline = new CssResolverPipeline(cssResolver, htmlPipeline); 
     XMLWorker xmlWorker = new XMLWorker(cssResolverPipeline, true); 
     XMLParser xmlParser = new XMLParser(xmlWorker); 
     xmlParser.Parse(stringReader); 
     document.Close(); 
    } 
} 

(출처 : iTextSharp XmlWorker: right-to-left) 당신은 쉽게 예를 원하는 경우

이,이 질문의 답변에서 살펴 :

HTML 문자열과 iText를 (샤프) 요소의 목록에 CSS 문자열을 구문 분석 코드는 다음처럼 간단하다 :

ElementList list = XMLWorkerHelper.parseToElementList(html, css); 

당신은 official iText web site에 더 많은 예제를 찾을 수 있습니다.

+1

다음 질문에 대한 답변에서 설명한대로 itextsharp.xmlworker.dll을 다운로드해야합니다. http://stackoverflow.com/questions/28212444/namespace-for-using-itextsharp-cssresolver-classes 또한 설명 : * XML을 시도했지만 확장자가 .xml 인 오류가 계속 발생했습니다. (확장명이 .xml 인 오류는 무엇입니까?) –

+0

HTML 문자열 + CSS 문자열을 목록으로 변환하는 한 행을 추가했습니다. iTextSharp 요소 중. 그것은 당신이 얻을 수있는만큼 간단합니다. 이 예제들은 또한 책 [ "StackOverflow에 대한 최고의 iText Questions"] (http://pages.itextpdf.com/ebook-stackoverflow-questions.html)의 일부입니다. –