使用iTextSharp从包含图片的HTML页面生成PDF

3
我使用iTextSharp.dll来创建PDF文档。但是,它只适用于文本HTML内容。如果我在页面上使用图片,它会抛出一个异常,提示找不到图片。
我的设计文件。
<asp:Panel ID="pdfPannel" runat="server">
 
      Sample Text
<img src="../Images/image1.png"/>


</asp:Panel>

<asp:Button ID="btnSave" runat="server" Text="Save As PDF" onclick="btnSave_Click" />

我的方法:

protected void btnSave_Click(object sender, EventArgs e)
{

Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=print.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
pdfPannel.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();

}

当我点击保存按钮时,出现以下错误:

无法找到路径的一部分'C:\Program Files\Common Files\Microsoft Shared\DevServer\Images\image1.png'。

请告诉我是否有其他替代方案来创建PDF。

请参考这个链接:http://stackoverflow.com/a/16061848/231316 - Chris Haas
请为您的图像使用完整路径,这样它才能正常工作。 - Manish Sharma
当我提供完整路径时,它仍然无法工作... 它将图像路径视为http://localhost:58095/testProject/D:/testProject/Images/image1.png,并且该图像未显示在页面上...它生成文本内容的PDF。 - Gopalakrishnan
你知道如何让它正常工作,以便将页面呈现为PDF,并且与网页本身的外观相同吗? - Eric Garrison
2个回答

1
你的代码看起来很好。问题似乎出在图像路径上。尝试将其设置为完全限定路径,它就能正常工作。
另外,如果你正在从服务器端代码操作HTML。那么我建议你使用Server.MapPath()来映射图像路径,这样它就能正常工作了。

谢谢Mayank。但是当我使用server.mapPath()时,它将图像URL视为"http://localhost:58095/testProject/D:/testProject/Images/Image1.png",并且无法显示该图像。 - Gopalakrishnan
当我使用 server.mapPath() 时,它会将图片的 URL 解析为 "http://localhost:58095/testProject/D:/testProject/Images/image1.png",导致图片无法显示。 - Gopalakrishnan
嗯...问题在于路径本身...我也遇到了同样的问题...我只是实现了完全限定路径,然后它就对我起作用了。还要检查它的HTML。如果HTML验证通过...代码也会解析... - Mayank Pathak
对我来说它不起作用,无论我输入什么都会抛出异常... 你能分享一下你的代码吗?或者发邮件给我@ p.gopalakrishnan@live.com - Gopalakrishnan

0

使用

http://localhost:58095/Images/image1.png 

获取图片路径。希望能帮到您。 localhost:58095 是您的本地机器地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接