0

このdll iTextSharp 5.3.0を使用してpdfファイルを作成しています。完全な .aspx ページを pdf に変換する方法はありますか? 私のページにはグリッドとサーバー側のコードがあります。

これは私のコードです:

protected void Button1_Click(オブジェクト送信者, EventArgs e) {

    createPDF(Server.MapPath("Default.aspx"));

}


private void createPDF(string html)
{


    TextReader reader = new StringReader(html);

    // step 1: creation of a document-object
    Document document = new Document(PageSize.A4, 30, 30, 30, 30);

    // step 2:
    // we create a writer that listens to the document
    // and directs a XML-stream to a file
    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("c://test.pdf", FileMode.Create));


    HTMLWorker worker = new HTMLWorker(document);

    document.Open();
    worker.StartDocument();
    List<IElement> p = HTMLWorker.ParseToList(new StreamReader(html), new StyleSheet());
    for (int k = 0; k < p.Count; k++)
    {
        document.Add((IElement)p[k]);
    }



    worker.EndDocument();
    worker.Close();
    document.Close();

}

動作していますが、ファイル test.pdf はプレーンテキストです。HTML がうまく解釈されず、グリッドが欠落しており、サーバー側の値 (グリッドからの値) も欠落しています。私もここからコードを試しました: http://forums.asp.net/t/1199774.aspx とここ: Itextsharp の HTMLParser の問題

前もって感謝します!

4

2 に答える 2

0

これが私の率直なアドバイスです!HTMLWorker.ParseToList で時間を無駄にしないでください。非常に初歩的な HTML パーサーを備えています。このパッケージを試してみてください。 https://github.com/pruiz/WkHtmlToXSharp

于 2012-06-28T11:49:54.323 に答える
0

ITextSharp はインライン CSS のみをレンダリングするため、CSS ファイルの追加中に問題が発生します。

            System.Web.HttpContext.Current.Response.ContentType = "application/pdf";
            System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=BookingDetails.pdf");
            System.Web.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            StringWriter sw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(sw);

            this.CreateBookingMainDiv.RenderControl(hw);

            StringReader sr = new StringReader(sw.ToString());
            Document pdfDoc = new Document(new Rectangle(922,1296),7f,7f,7f,0f);

            PdfWriter writer = PdfWriter.GetInstance(pdfDoc, System.Web.HttpContext.Current.Response.OutputStream);

            pdfDoc.Open();

            //HtmlPipeline

            CssAppliers ca = new CssAppliersImpl();
            //ICssFile cfile = new CssFileProcessor();
            HtmlPipelineContext htmlContext = new HtmlPipelineContext(ca);
            htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
            //CSS stuff

            //var cssResolver = new StyleAttrCSSResolver();
            //var DamcoCss = XMLWorkerHelper.GetCSS(new FileStream(HttpContext.Current.Server.MapPath("~/css/damco.css"), FileMode.Open));
            ICssFile cfile = new CssFileImpl();

            ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);

            //String DamcoCss = HttpContext.Current.Server.MapPath("~/css/damco.css");
            //String BootStrapCss = HttpContext.Current.Server.MapPath("~/css/bootstrap.css");
            //String BootStrapCssTheme = HttpContext.Current.Server.MapPath("~/css/bootstrap-theme.css");

            //Add the external CSS file        

            //cssResolver.AddCssFile(DamcoCss, true);
            //cssResolver.AddCssFile(BootStrapCss, true);
            //cssResolver.AddCssFile(BootStrapCssTheme, true);

            //Pipeline
            IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(pdfDoc, writer)));
            //XMLWorker
            XMLWorker worker = new XMLWorker(pipeline, true);
            //and...we parse
            XMLParser parser = new XMLParser(true, worker);
            //parser.AddListener(worker);
            parser.Parse(sr);
            parser.Flush();
            pdfDoc.Close();

            System.Web.HttpContext.Current.Response.Write(pdfDoc);
            System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
            //System.Web.HttpContext.Current.Response.End();

HTMLWorker の代わりに XMLWorker を使用します。魅力のように機能します。

于 2014-10-27T12:42:09.913 に答える