c# - 使用 iTextsharp.dll 生成 PDF 时不应用 CSS

标签 c# .net pdf itextsharp

我正在使用 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();

最佳答案

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

其次,我在名为 XMLWorker 的 iText/iTextSharp 附加组件中看到了更多 HTML/CSS 事件,您可能想看看。您不再“加载样式”,只需将原始 HTML/CSS 传入即可,它会计算出很多东西。可以看到一些examples here , 查看列表 supported CSS attributes here , download 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");

关于c# - 使用 iTextsharp.dll 生成 PDF 时不应用 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8178623/

相关文章:

c# - 程序集特定设置未在运行时加载

c# - 在 .NET Windows 窗体中,如何在两个 EXE 或应用程序之间发送数据?

c# - Log4Net 错误 : Failed to find configuration section 'log4net' in the application's . 配置文件

c# - SharePoint - 如何使用列表 Web 服务插入新项目?

c# - 向上、向下、向左或向右滑动时,如何调用另一个类中的方法? Unity2D

c# - 简单的就地离散傅立叶变换 (DFT)

c# - DbParameter IsNullable 功能?

php - 如何生成 DIV 中包含多个 highcharts 的页面的单个 PDF

python - 使用 Wea​​syprint 创建文件响应

python - 使用 Python 进行 requests.get() 后 PDF 文件损坏