8

iTextSharp を使用して Web ページの一部を pdf に変換しようとしていますが、pdf の生成は正しく機能していますが、css スタイルが適用されていません。スタイルを 1 つずつ適用しようとしましたが、うまくいかないようです。これは私がこれまでに思いついたものです:

//Get the portion of the page to convert.
StringBuilder sb = new StringBuilder();
print_div.RenderControl(new HtmlTextWriter(new StringWriter(sb)));
string html = sb.ToString();

//Generate a random filename to use for the pdf
Guid random_guid;
random_guid = Guid.NewGuid();
string fileName = random_guid.ToString() + ".pdf";
string filename_with_folder = @"pdf\sl_" + fileName;
string fullFilePath = System.IO.Path.Combine(Request.PhysicalApplicationPath, filename_with_folder);

using (Document doc = new Document())
{
    // Create the pdf
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(fullFilePath, FileMode.Create));
    doc.Open();
    try
    {
        //Set the font size for all elements
        StyleSheet styles = new StyleSheet();
        styles.LoadStyle("body", "fontsize", "8px");

        //Write the content to the pdf document
        StringReader sr = new StringReader(html);
        XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, sr);
    }
    catch (Exception ex)
    {
    }
    doc.Close();
}

何か不足していますか?私は HTMLWorker を使い始め、XMLWorker に切り替えましたが、今は混乱しているだけだと思います。助けていただければ幸いです。

試み #2

返信いただきありがとうございます!これは私が思いついたものですが、うまくいきません。現在、私のコンテンツが PDF にまったく表示されていません。その理由がわかりません。何かご意見は?

using (Document doc = new Document())
{
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(fullFilePath, FileMode.Create));
    doc.Open();

    // CSS
    var cssResolver = new StyleAttrCSSResolver();
    var cssFile = XMLWorkerHelper.GetCSS(new FileStream(HttpContext.Current.Server.MapPath("~/css/print.css"), FileMode.Open));
    cssResolver.AddCss(cssFile);

    // HTML
    CssAppliers ca = new CssAppliersImpl();
    HtmlPipelineContext hpc = new HtmlPipelineContext(ca);
    hpc.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

    // PIPELINES
    PdfWriterPipeline pdf = new PdfWriterPipeline(doc, writer);
    HtmlPipeline htmlPipe = new HtmlPipeline(hpc, pdf);
    CssResolverPipeline css = new CssResolverPipeline(cssResolver, htmlPipe);

    XMLWorker worker = new XMLWorker(css, true);
    XMLParser p = new XMLParser(worker);
    StringReader sr = new StringReader(html);
    p.Parse(sr);
    doc.Close();
}

私は近いですか、それとも要点を完全に見逃していますか?

4

3 に答える 3

0

この問題を回避できたかどうかはわかりませんが、私の質問「 PDF を作成するときに CSS を iTextSharp (5.4.3) で動作させることはできません」で CSS スタイルが適用されないという同じ問題がSO で発生しました。

基本的に、スタイルシートの一部が適用されていることがわかりました (たとえば、表のセルの周囲の境界線) が、他の部分は適用されていません (フォントの色、PX にないもののサイズ)。

于 2013-11-14T10:14:45.683 に答える