如何使用 iText 和 htmltopdf 添加对外部样式表的引用

How to add reference to external stylesheet using iText and htmltopdf

我有一个控制台应用程序可以从 HTML 生成 PDF。 HTML 看起来像这样:

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head>
    <meta charset="utf-8" />
    <link rel="stylesheet" type="text/css" href="html\somestyle.css" /> </head>

如果我使用 <style> 标签将样式直接包含在 HTML 中,它们就会显示在 PDF 中。但是我需要使用外部样式表。

文件夹结构是这样的:

***Task_ABC (folder)
******Task.exe
******HTML (folder)
*********template.html
*********somestyle.css

控制台应用程序是通过 Windows 任务计划程序安排的。

如果我从命令提示符手动 运行 应用程序,html\sometyle.css 语法有效并且样式显示在 PDF 中。

但是当 Task Scheduler 运行它时,样式不会显示在 PDF 中。

我试过 somestyle.csshtml/somestyle.css 语法,但它们不起作用。

如果您将 HTML 作为文件流传递给 HtmlConverter 而不是将其作为文件传递,那么资源将根据当前工作目录进行解析。这可能是在另一个环境中处理您的文件时出现问题的原因。

您可以设置 baseUri,即 HTML 中的所有资源将在 ConverterProperties 中解析的 uri:

HtmlConverter.convertToPdf(fileInputStream, fileOutputStream, new ConverterProperties().setBaseUri(baseUri));

baseUri 应该指向包含您的 html 目录的目录。您也可以自由使用 html/somestyle.css link 语法,不必使用 Windows 式路径。