【发布时间】:2018-08-10 07:21:02
【问题描述】:
我一直在尝试使用 ITextSharp 创建 Pdf 文件。我可以通过 ajax 传递 html 内容,但 pdf 包含一些图像,这些图像保存为数据库中的 base64 编码数据。
我将如何获取这些数据并将它们转换为图像并插入到我的表格行中。
我想实现这样的目标:
<table>
<tr>
<td>{image 1} </td><pre><td>{image 1} </td>
</tr>
</table>
我能够创建 pdf 文件,但我得到的是 base64 数据而不是图像
这是我的代码:
public ActionResult CreatePdf(string htmlData)
{
string mytblhtml = htmlData;
mytblhtml += GetImage();
string fileName = "MyPdf.pdf";
using(var ms = new MemoryStream())
{
using(var doc = new Document(PageSize.A4, 25, 25, 25, 25))
{
using(var writer = PdfWriter.GetInstance(doc, ms))
{
doc.Open();
using(var srHtml = new StringReader(mytblhtml))
{
iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml);
}
doc.Close();
}
}
// bPDF = ms.ToArray();
TempData[fileName] = ms;
return Json(new { success = true, fileName }, JsonRequestBehavior.AllowGet);
}
}
private string GetImage()
{
string imgHtml = "<table><tr>";
using(EmpDb db = new EmpDb())
{
var emps = db.Employees.ToList();
foreach(var e in emps)
{
if(!String.IsNullOrWhiteSpace(e.Image))
{
imgHtml += $@"<td>data:{e.Image}</td>";
}
}
imgHtml += "</tr></table>";
}
return imgHtml;
}
public ActionResult DownloadCertPdf(string fileName)
{
var ms = TempData[fileName] as MemoryStream;
if(ms == null)
{
return new EmptyResult();
}
TempData[fileName] = null;
return File(ms.ToArray(), "application/pdf", fileName);
}
【问题讨论】:
-
感谢大家伸出援手。我决定以不同的方式实施。而不是尝试解析和读取 img html 标签。创建了一个返回我添加到文档中的图像的方法。公共 iTextSharp.text.Image ConvertImage(string base64String) { iTextSharp.text.Image png = null;字节[] 字节 = Convert.FromBase64String(base64String); png = iTextSharp.text.Image.GetInstance(bytes);返回.png; }
标签: c# asp.net-mvc itext pdf-generation