c# - 如何使用 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
,但它们不起作用。
解决方案
如果您将 HTML 作为文件流传递给HtmlConverter
而不是作为文件传递,则资源将根据当前工作目录进行解析。这可能是在另一个环境中处理文件时出现问题的原因。
您可以设置baseUri
, 即 HTML 中的所有资源将被解析的 uri ConverterProperties
:
HtmlConverter.convertToPdf(fileInputStream, fileOutputStream, new ConverterProperties().setBaseUri(baseUri));
baseUri
应该指向包含您的目录的html
目录。您还可以自由使用html/somestyle.css
链接语法,不必使用 Windows 样式的路径。
推荐阅读
- swiftui - 通过 WKWebView JS 中的 postMessage 处理程序调用 swift 函数
- java - JSMPP,获取交付收件人报告
- c - Xilinx 将代码从一个处理器移植到另一个处理器
- angular - 如何在依赖于 Input() 值的多个或单个 mat-select 中预选选项?
- c# - 无法使用 UPDATE 命令从 ASP.NET 文本框更新我的 SQL Server 数据库
- url - firefox:从 url 指定下载位置
- function - 创建返回两个文件的函数
- cadence-workflow - 允许完成后取消 CronSchedule 工作流程
- visual-studio-code - 如何使用 VsCode 和 windbg 设置类似 VisualStudio 的开发循环?
- c# - Windows 窗体应用程序元素未显示在 c# 文件中