0

我一直在使用(免费版)HiQPdf 库将 html 页面转换为 pdf 文档。

我还在我的页面中使用了 .Net 框架 (System.Web.UI.DataVisualization.Charting.Chart) 中的几个图表对象来生成条形图形的不显示值随时间变化。当我使用 VS 进行调试时,它在我的本地环境中会产生奇迹,但是当我在我的 IIS 或其他服务器上发布时,图表根本不会出现在 pdf 上 - 注意:它们确实出现在网页上,只是没有出现在 pdf 上。

在 Pdfs 中,所有的 html 都正确显示,包括 css,显示它与页面上看到的完全一样,除了图表图像。我有点理解它们不会像在 html 中那样出现,图表中的图像源会产生类似的结果:

<img id="MainContent_MyPageControl_ctl00" src="/MyTestWebSite/ChartImg.axd?i=charts_0/chart_0_2.png&amp;g=396d61e14ceb41c08be06fd956cd4dca"

因为真正生成的 png 图像甚至没有像往常一样直接引用。但事实是,当从 VS 本地运行时,它们确实出现在生成的 pdf 中,无论如何都会产生与上述类似的 html。我看到的唯一区别是,当我在本地运行时,图像图表处理程序键在 webconfig 中定义为:

add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" 

但是在服务器上发布时,我已将其更改为:

add key="ChartImageHandler" value="storage=file;timeout=20;Url=~/MyfolderTempcharts/;deleteAfterServicing=false;" 

那么为什么图表没有出现在我生成的 pdf 上,或者如果我从 VS 运行它们为什么会出现?

有人遇到过这个问题吗?

4

1 回答 1

0

所以我想出了一种方法来解决我的问题,如果有人也有需要,我会在这里分享。交易是 Chart 对象使用 http 处理程序来呈现图表生成的图像(您可以从这些人那里详细了解它:http ://www.4guysfromrolla.com/articles/081909-1.aspx )

起初我以为我可以操纵 html(我在页面渲染之前获得)并用可访问的链接替换图像源以发送到 HiQPdf - 因为我需要临时将生成的图像复制到公共文件夹。这很好,除非在我的情况下,我处理的敏感数据即使只是暂时也不应该被访问。所以我要做的是检查图像文件是否存在(在我配置的文件夹中)并从中提取字节数据,将其转换为 base 64 并在处理程序所在的图像源 html 中替换它,瞧。

Base64 html 嵌入图像的示例:

请注意,这个被操纵的 html 永远无法从外部访问,并且只能在服务器端工作,以便提供 HiQPdf 可以处理的“普通”html。

于 2018-03-20T12:25:56.527 回答