使用存储为.NET资源的CSS使用iText7将HTML渲染为PDF

时间:2018-07-20 21:38:23

标签: c# html css .net-core itext7

我正在尝试将一些代码转换为将HTML呈现为PDF文件的.NET Core。我可以将其与iTextSharp一起使用,但是由于它不支持.NET Core(或.NET Standard),因此我将切换到iText7。在我正在处理的场景中,正在用代码创建HTML(使用RazorLight库),然后使用CSS呈现HTML,该CSS作为资源存储在库中(如果需要,我可以将其拉回到字符串中)。 / p>

使用iTextSharp,可以将以字符串形式存储的CSS文件应用于呈现过程。我在iTextSharp中执行此操作的方式是(这只是部分):

var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
var cssContent = GetTextMessage("Resources.MyStyles.css");
cssResolver.AddCss(cssContent, true);
var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(pdfDocument, pdfWriter)));
var worker = new XMLWorker(pipeline, true);
var p = new XMLParser(worker);
p.Parse(new StringReader(htmlText));
p.Flush();
pdfWriter.Flush();
pdfWriter.Close();
return outputMemoryStream.ToArray();

到目前为止,我还无法在iText7中找到可以传递到HtmlConverter中的等效项。尽管有CssAppliers和CssApplierFactories(不是它们的实际类名),但是我还没有找到一种方法来从存储在字符串或资源中的CSS文件中使用CSS定义来加载其中的任何一个。

可能可以将CSS保存到temp文件夹中的文件中,然后将其读回,但我希望尽可能避免这种攻击。使用外部引用还需要更改HTML模板以包含CSS引用,这以前是不需要的。

我在这里缺少基本的东西吗?

1 个答案:

答案 0 :(得分:0)

您看过这篇文章吗? https://developers.itextpdf.com/question/how-add-external-css-while-generating-pdf

我认为您需要添加一个css resurce作为字节数组