我正在尝试生成一个从超文本标记语言字符串使用DynamicPdf.HmtlConverter库。为了生成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 ..!
发布于 2021-01-07 18:27:10
该问题与用于样式表的路径有关。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");希望这能解决这个问题。
发布于 2021-01-08 20:02:30
这对我很有效:您可以在HTML源中指定外部CSS,并使用它进行转换,使用DynamicPdf库不会有任何问题。您可以使用URL从网站获取CSS,或者如果您使用HTML字符串作为转换的输入,并希望使用外部CSS,那么您将需要指定基本路径来挑选资源。请参考位于: 1:https://www.dynamicpdf.com/docs/dotnet/html-converter-base-urls的HTML转换器基础标签文档
请参见下面的代码示例:
下面的HTML text使用位于BasePath Uri中指定的文件夹中的文件的外部样式。
Uri basepath = new Uri(@"C:\Temp\Resource\sytlesheet.css");
ceTe.DynamicPDF.HtmlConverter.Converter.Convert(htmlText, @"C:\Temp\MyHTmlPDF.pdf", basepath);https://stackoverflow.com/questions/65610310
复制相似问题