【问题标题】:HiQPdf not displaying Charts on the generated PDFHiQPdf 未在生成的 PDF 上显示图表
【发布时间】:2026-02-01 20:30:02
【问题描述】:

我一直在使用(免费版)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 运行它们为什么会出现?

有人遇到过这个问题吗?

【问题讨论】:

    标签: c# asp.net charts hiqpdf


    【解决方案1】:

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

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

    Base64 html 嵌入图片示例:

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

    【讨论】: