我有一个控制台应用程序,可以从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 Task Scheduler计划的。
如果我从命令提示符下手动运行该应用程序,则html\\sometyle.css
语法有效,样式显示在PDF中。
但是当Task Scheduler运行它时,样式不会显示在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样式的路径。
baseUri
将是可执行文件所在的文件夹吗?像c:\apps\task_abc
什么?@ joym8这是包含资源的文件夹,在本例中为包含
html
目录。您可以将基本uri视为前缀,并将其附加到HTML中的资源路径中谢谢。这对我
new ConverterProperties().setBaseUri( AppDomain.CurrentDomain.BaseDirectory + "css");
有用:css是主项目目录下的文件夹。