我一直在使用(免费版)HiQPdf库将html页面转换为pdf文档。
我还在我的网页中使用.Net Framework中的几个图表对象(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。 我看到的唯一区别是,当我运行本地时,Image Chart Handler键在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运行它们会出现?
有人遇到过这个问题吗?
答案 0 :(得分:0)
所以我找到了解决问题的方法,如果有人也需要,我会在这里分享。这笔交易是图表对象使用http处理程序来渲染图表生成的图像(您可以从这些人那里详细了解它:http://www.4guysfromrolla.com/articles/081909-1.aspx)
起初我以为我可以操作html(我在页面渲染之前获得)并用可访问的链接替换图像源以发送到HiQPdf - 为此我需要临时将生成的图像复制到公共文件夹。除非在我的情况下我处理敏感数据,即使只是暂时不能访问,这也没关系。 所以我做的是检查图像文件是否存在(在我配置的文件夹中)并从中提取字节数据,将其转换为base 64并将其替换为处理程序所在的图像源html,并且瞧。
Base64 html嵌入图像的示例:
请注意,这个被操纵的html永远不能从外部访问,只能在服务器端工作,以便提供正常的&#34; HiQPdf可以处理的HTML。