【问题标题】:Not applying the CSS while generating PDF using iTextsharp.dll使用 iTextsharp.dll 生成 PDF 时不应用 CSS
【发布时间】:2011-12-31 23:49:45
【问题描述】:

我正在使用 iTextSharp.dll 生成 PDF,但问题是我无法应用该 CSS。我有一个 div:

 <div id="personal" class="headerdiv">
      Personal Data
 </div>

现在我的 .aspx.cs 代码是这样的:

   iTextSharp.text.html.simpleparser.StyleSheet styles = new         iTextSharp.text.html.simpleparser.StyleSheet();

    styles.LoadTagStyle("#headerdiv", "height", "30px");
    styles.LoadTagStyle("#headerdiv", "font-weight", "bold");
    styles.LoadTagStyle("#headerdiv", "font-family", "Cambria");
    styles.LoadTagStyle("#headerdiv", "font-size", "20px");
    styles.LoadTagStyle("#headerdiv", "background-color", "Blue");
    styles.LoadTagStyle("#headerdiv", "color", "White");
    styles.LoadTagStyle("#headerdiv", "padding-left", "5px");

    HTMLWorker worker = new HTMLWorker(document);
    worker.SetStyleSheet(styles);


    // step 4: we open document and start the worker on the document 
    document.Open();
    worker.StartDocument();
    // step 5: parse the html into the document      
    worker.Parse(reader);
    // step 6: close the document and the worker     
    worker.EndDocument();
    worker.Close();
    document.Close();

【问题讨论】:

    标签: c# .net pdf itextsharp


    【解决方案1】:

    这里发生了几件事。首先,iText 和 iTextSharp 中的 HTML/CSS 解析器远未完成。他们肯定非常强大,但仍有一段路要走。每个版本都会变得更好,因此请始终确保您使用的是最新版本。

    其次,我在 iText/iTextSharp 的一个名为 XMLWorker 的附加组件中看到了更多 HTML/CSS 活动,您可能想查看这些活动。您不再“加载样式”,您只需传入原始 HTML/CSS,它就会计算出很多东西。您可以看到一些examples here,查看supported CSS attributes heredownload it here 的列表(并获取两个丢失的文件herehere)。

    第三,LoadTagStyle 用于加载 HTML 标签的样式属性,而不是 CSS ID 或类。你想使用LoadStyle按类加载:

    styles.LoadStyle("<classname>", "<attribute>", "<value>");
    

    不幸的是,这种方法仍然不能做你希望它做的事情。例如,要更改字体大小,您可能会说:

    styles.LoadStyle("headerdiv", "font-size", "60ptx);
    

    但要使其正常工作,您只能使用相对 HTML 字体大小(1、2、-1 等)或 PT 大小,并且您必须使用 size 属性:

    styles.LoadStyle("headerdiv", "size", "60pt");
    //or
    styles.LoadStyle("headerdiv", "size", "2");
    

    LoadStyle 老实说感觉像是一个事后的想法,只是部分完成了,我建议不要实际使用它。相反,如果可以的话,我建议直接内联编写样式属性:

    string html = "<div id=\"personal\" class=\"headerdiv\" style=\"padding-left:50px;font-size:60pt;font-family:Cambria;font-weight:700;\">Personal Data</div>";
    

    显然这违背了 CSS 的要点,这也是他们在上面的新 XMLWorker 上工作的原因。

    最后,要按名称使用字体,您必须先向 iTextSharp 注册它们,它不会去寻找它们:

    iTextSharp.text.FontFactory.Register(@"c:\windows\fonts\cambria.ttc", "Cambria");
    

    【讨论】:

    • 你好,这没关系......但我不能使用你上面的东西应用背景颜色效果......请给我解决方案............
    • 不幸的是,获得背景颜色支持的唯一两种方法是使用表格或自己绘制形状
    • Thnxs Chris Haas 先生....我从前两天开始尝试它.....thnxs 为您提供有用的信息.....
    • 你能解释一下,如何为pdf页面应用边框写同样的东西
    • @santhosha,请将此作为新问题发布
    【解决方案2】:

    如果有人仍然对此有疑问。最新版本的 itextsharp(当前为 5.3.2)显着改进了 HTMLWorker 处理器。

    你可以在这里得到它:http://sourceforge.net/projects/itextsharp/

    【讨论】:

      【解决方案3】:

      引用背景颜色的正确方法是通过HtmlTags类

      styles.LoadTagStyle(HtmlTags.HEADERCELL, HtmlTags.BACKGROUNDCOLOR, "Blue");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-17
        • 2014-06-20
        • 2015-03-06
        相关资源
        最近更新 更多