首页 > 解决方案 > 如何使用 iText 和 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>

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

文件夹结构是这样的:

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

控制台应用程序通过 Windows 任务计划程序进行计划。

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

但是当任务计划程序运行它时,样式不会显示在 PDF 中。

我已经尝试过somestyle.css语法html/somestyle.css,但它们不起作用。

标签: c#cssitextpdf-generationitext7

解决方案


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

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

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

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


推荐阅读