【问题标题】:pdfHTML with in-memory CSS带有内存中 CSS 的 pdfHTML
【发布时间】:2017-05-02 17:01:28
【问题描述】:

我正在尝试 iText7 并尝试拼凑如何做事。似乎我可以输入一个基本 URI 来获取外部资源,我假设如果它找到一个 .css 它将应用它?我有一种特殊情况,我更容易将 CSS 作为字符串保存在内存中。我可以使用 HtmlConverter.convertToPdf() 并将 HTML 作为字符串而不是 CSS 传递,这似乎很奇怪。

作为第二个问题,如果它在该基本 URI 上找到多个 CSS 文件会发生什么?

最后(抱歉转储),如果 HTML 包含图像的 FQDN URL,我假设/希望它会直接提取图像?换句话说,我希望我不必将这些图像存储/写入到指定的基本 URI 中?

谢谢。

更新:我整理了一个快速演示。我发现它下载具有完整 URL 的图片,这很棒。

但是,它似乎没有加载我指定的文件夹中的 CSS 文件。代码:

StringBuilder sb = new StringBuilder(File.ReadAllText("demoHtml.html"));
// this folder, which is relative to the test .exe, contains a file called pdf.css
ConverterProperties props = new ConverterProperties().SetBaseUri("Content/Pdf");
FileStream fs = new FileStream("itext.pdf", FileMode.Create);
HtmlConverter.ConvertToPdf(sb.ToString(), fs, props);

还有 CSS:

img {
    max-width: 100%;
}
table {
    vertical-align: top;
}
td ol {
    -webkit-padding-start: 15px;
    padding-left: 15px;
}
thead tr {
    background: #aaa;
}
tr:nth-child(even) {
    background: #eee;
}

【问题讨论】:

  • CSS 文件是否从您尝试转换为 PDF 的 HTML 中引用?
  • 不是。我习惯了在其中传递 CSS 文件(或字符串)的其他几个组件。我想通过设置 baseUri 来应用它在该文件夹中找到的任何 CSS。但是现在,多亏了@SamuelD,我看到 .setBaseUri() 只是用来解析它在期望的完整 HTML 页面中找到的任何相对路径。仍然存在一些我认为简单的 CSS 属性(例如图像上的最大宽度)的问题。

标签: html css itext7


【解决方案1】:

问题1的解答:

我正在尝试 iText7 并尝试拼凑如何做事。似乎我可以输入一个基本 URI 来获取外部资源,我假设如果它找到一个 .css 它将应用它?我有一种特殊情况,我更容易将 CSS 作为字符串保存在内存中。我可以使用 HtmlConverter.convertToPdf() 并将 HTML 作为字符串而不是 CSS 传递,这似乎很奇怪。

我花了很多时间来寻找解决这个问题的方法。一切似乎都正确,我什至问了一个关于使用 CSS 文件的支持问题。与itext5(itextsharp)相反,itext7不能管理一个有空格的url。

所以在这样的路径中进行本地测试:c:/Path to project/project/name/wwwroot/ 将不起作用(注意空格)

一开始我没有注意到这一点,因为我以编程方式将路径生成到我的 css 文件夹:

 var basepath = env.ContentRootPath + "\\wwwroot\\pdfcss\\";

改成:

var basepath = @"G:\some-other\directory\pdfcss\";

问题2的解答:

现在知道了,我可以解决你的第二个问题:

作为第二个问题,如果它在该基本 URI 上找到多个 CSS 文件会发生什么?

没什么,您仍然需要将链接插入到您的 html 中的 head 元素中。如果不添加,您将没有任何 css!

问题3的解答:

确实:

最后(抱歉转储),如果 HTML 包含图像的 FQDN URL,我假设/希望它会直接提取图像?换句话说,我希望我不必将这些图像存储/写入到指定的基本 URI?

您可以执行以下操作:

<img id="logo" 
src="https://xxxxx.blob.core.windows.net/path/to-image-
logo.png" />

【讨论】:

  • 我现在完全明白了!谢谢!您是否碰巧知道 pdfHTML 官方支持的样式的完整列表?图像最大宽度和 tr:nth-child(even) 没有得到尊重。 webkit 也没有受到尊重,但这并不是那么出乎意料,所以我改变了它。不过,图像宽度非常重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
相关资源
最近更新 更多