我一直在使用(免费版)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&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 运行,它们会出现?
有人遇到过这个问题吗?
所以我找到了一种方法来处理我的问题,如果有人也有需要,我在这里分享。交易是 Chart 对象使用 http 处理程序来渲染图表生成的图像(您可以从这些人那里详细了解它:https://web.archive.org/web/20201205231110/https://www.4guysfromrolla.com/articles/081909-1.aspx)
起初,我认为我可以操作html(我在页面渲染之前获得的html)并将图像源替换为可访问的链接以发送到HiQPdf - 为此,我需要暂时很少将生成的图像复制到公共文件夹。除非在我的情况下,我处理的敏感数据永远不会被访问,即使只是暂时的,否则这很好。 所以我要做的是检查图像文件是否存在(在我配置的文件夹中)并从中提取字节数据,将其转换为 base 64 并在处理程序所在的图像源 html 中替换它,瞧。
Base64 html 嵌入式图像的示例:
请注意,这个纵的html永远无法从外部访问,只能在服务器端处理,以便提供HiQPdf可以处理的"普通"html。