如何解决外部样式表不适用于 HtmlTextWriter
我正在尝试使用 DynamicPdf.HmtlConverter 库从 Html 字符串生成 Pdf。 为了生成 Html 字符串,我使用 System.Web.UI 中的 HtmlTextWriter 类。 我正在尝试按如下方式添加外部样式表:
StringBuilder sb = new StringBuilder();
sb.Append(@"<!DOCTYPE html>" + Environment.NewLine);
StringWriter stringWriter = new StringWriter();
using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter))
{ //adding head and link tag
writer.RenderBeginTag(HtmlTextWriterTag.Html);
writer.RenderBeginTag(HtmlTextWriterTag.Head);
writer.Write("<Meta charset=" + "\"UTF-8\">");
//Add Link tag attributes
writer.AddAttribute(HtmlTextWriterattribute.Rel,"stylesheet");
writer.AddAttribute(HtmlTextWriterattribute.Href,@"~\Stylesheet1.css"); //style sheet reference
writer.AddAttribute(HtmlTextWriterattribute.Type,"text/css");
writer.RenderBeginTag(HtmlTextWriterTag.Link);
writer.RenderEndTag(); // end of Link tag
writer.RenderEndTag(); // end of head tag
// Body tag
writer.RenderBeginTag(HtmlTextWriterTag.Body)
writer.RenderEndTag(); // end of Body tag
writer.RenderEndTag(); // end of Html tag
}
sb.Append(stringWriter);
因此“sb”将具有 Html 字符串,该字符串将传递给 DynamicPdf 库方法以生成 Pdf,如下所示:
ceTe.DynamicPDF.HtmlConverter.Converter.Convert(sb.ToString(),@"~\output3.pdf",null,options);
外部样式表对 Html 控件没有任何影响。
关于如何使用带有 HtmlTextWriter 和 DynamicPdf 库的外部样式表生成 Pdf 的任何建议..!!!
解决方法
的问题是与用于样式表的路径。 HTML并没有认识到“〜”字符的任何特殊含义。见RFC3986 Section:2.3
在Linux中,“〜”有特殊的意义,并转换到主目录但对于HTML它只是另一个字符。我建议你使用Path.GetFullPath("~")
获得完整路径的主目录,然后使用来代替。
更新:
我主要是集中于HTML部分,但我注意到,ceTe.DynamicPDF.HtmlConverter.Converter.Convert()
被设置为第三个参数null
。它必须是在HTML字符串中使用的所有文件路径的基本路径。见DynamicPDF Reference
因此,代码看起来应该是这样的:
ceTe.DynamicPDF.HtmlConverter.Converter.Convert(sb.ToString(),@"~\output3.pdf",new Uri(@"file://C:\Users\Z0042ADE\source\repos\HtmlTextWriterDemo\HtmlTextWriterDemo\"),options);
然后,你可能不需要使用HTML字符串的任何路径。这可以是刚样式名:
writer.AddAttribute(HtmlTextWriterAttribute.Href,@"Stylesheet1.css");
希望这将解决问题。
,这对我有用: 您可以在 HTML 源代码中指定外部 CSS,并使用 DynamicPdf 库将其用于转换而不会出现任何问题。您可以使用 URL 从网站获取 CSS,或者如果您使用 HTML 字符串作为转换的输入并希望使用外部 CSS,那么您需要指定基本路径来选择资源。请参阅有关 HTML 转换器基本标签的文档,网址为: [1]:https://www.dynamicpdf.com/docs/dotnet/html-converter-base-urls
请看下面的代码示例:
下面的 HTML 文本使用放置在 BasePath Uri 中指定的文件夹中的文件的外部样式。
Uri basepath = new Uri(@"C:\Temp\Resource\sytlesheet.css");
ceTe.DynamicPDF.HtmlConverter.Converter.Convert(htmlText,@"C:\Temp\MyHTmlPDF.pdf",basepath);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。