首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外部样式表不适用于HtmlTextWriter

外部样式表不适用于HtmlTextWriter
EN

Stack Overflow用户
提问于 2021-01-07 18:08:56
回答 2查看 104关注 0票数 0

我正在尝试生成一个从超文本标记语言字符串使用DynamicPdf.HmtlConverter库。为了生成Html字符串,我使用了来自System.Web.UI的HtmlTextWriter类。我尝试添加如下外部样式表:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
ceTe.DynamicPDF.HtmlConverter.Converter.Convert(sb.ToString(),@"~\output3.pdf", null, options);

外部样式表不会对Html控件产生任何影响。

如何使用外部样式表和HtmlTextWriter和DynamicPdf库来生成Pdf ..!

EN

回答 2

Stack Overflow用户

发布于 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

因此,代码应该如下所示:

代码语言:javascript
复制
ceTe.DynamicPDF.HtmlConverter.Converter.Convert(sb.ToString(),@"~\output3.pdf", new Uri(@"file://C:\Users\Z0042ADE\source\repos\HtmlTextWriterDemo\HtmlTextWriterDemo\"), options);

然后,您可能不需要在HTML字符串中使用任何路径。这可以只是样式表名:

代码语言:javascript
复制
writer.AddAttribute(HtmlTextWriterAttribute.Href,@"Stylesheet1.css");

希望这能解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 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中指定的文件夹中的文件的外部样式。

代码语言:javascript
复制
Uri basepath = new Uri(@"C:\Temp\Resource\sytlesheet.css");
ceTe.DynamicPDF.HtmlConverter.Converter.Convert(htmlText, @"C:\Temp\MyHTmlPDF.pdf", basepath);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65610310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档