如何在不保存图像的情况下将Base 64编码图像数据作为图像插入表中?

时间:2018-03-02 04:48:29

标签: c# asp.net-mvc itext pdf-generation

我一直在尝试使用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);
        }

2 个答案:

答案 0 :(得分:0)

在HTML页面中,您可以在td标记中插入类似的内容

<img width="16" height="16" alt="star" src="data:image/png;base64,YOURBASE64CODEDIMAGE" />

答案 1 :(得分:0)

在html中有很多其他使用内联base64数据作为图像的例子 Embedding Base64 Images

在html中插入图像的两种方法是直接使用标记和css中的背景图像。

对于图像标记,您需要使用图像的元数据填充src,然后填充base64字符串。对于CSS,你需要做类似的事情。 iText应该允许PDF中的图像: https://developers.itextpdf.com/fr/content/itext-7-converting-html-pdf-pdfhtml/chapter-7-frequently-asked-questions-about-pdfhtml/can-pdfhtml-render-base64-images-pdf

<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV4AAACWBAMAAABkyf1EAAAAG1BMVEXMzMyWlpbFxcWqqqqcnJyxsbG3t7e+vr6jo6OVuynYAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADG0lEQVR4nO2YzW/aQBDFF2PjHBkwCUfTSOEKUaRecRpFPeKqX0eo1KZHnFx6xFWV/tud2V3DsiJEPdi+vN/BC/aL9mV2PDuLUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgP/jMkuueYhIWPCn4CZ5+4I2Jj3kIk1OS+tC+1wq1d35LXhcvSTWw7zye0JaF2uZe6TUWeU3lvH8uDg0fkvr95S0LrLk8SqjVIXjH8xGPP2dlkl6VJwbv9kzSx9OS2uiR1uZd6k6VZzWiQR7eUQb/CLjt8qBl6W10aWNrOtWTS7snZI/BDqRfTIyfgP5m9PS2tAZKXMWA3uH+uJkcERL1m/M6fOKtDY6uixxfNd9cyOmGV9zkx0TWflIUkb4c5dpvz06Im2I3oOdOF+YG5FOzmJovyzE9KZSm/oQJUekTXLGE8+3X5NnZRNaTcb6QZBxpZvvDRm/3XFUvl950gaZljxlecfZeSvexUTHhnBNaUD7BDV+zxJ+87iMHUobg3er3+blNyZSx0RIM7dgGb+h3lpuPWmTfq/l5f8wnXMeGxPh7pUaFI4fc7tDozdPNPSkTfrluMqq9/hShdA+LIel8/5XflOdKZ60MTiuC/VJcrEc+UGbkLsf2PrwRel9raX4yqrbGBZjPym5bdvshY433hNbyl8mtyWL5/Ze+oDccuXGkhYt1Qel41r58Ypqj9z+y/Wb9duovx/v5bovX/6mFZLbfx36bWN/W4/kOhn3Pusx0b2a0xTkibNdWL/fV0r3SJ60EUx0iqF5d+TbQdMV0EXpxM/41Q+l52ijP9M+y3OztlJrD5raLs2cdsf61RGVnqOF/rcr6RnRIJZlj+RycGiYUNqt2smd30L+x5wvLZwvYho+XpU8Z5Z8i+cytz6UVR05J0PgnCirHe0+fZIz6oG0IfTZfGyO5rrWuodeHfV8X2BDe74Qtu2cj/U5fiaF1ozmhL+q/M0kJ3YrbuuZKIaetDF+ZuY3mks7uj/arGWxo31Fs36DG3q38aQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4FX+AcL6c1W3I+QxAAAAAElFTkSuQmCC' />

示例代码使用PNG,但您可以使用其他mime类型(如jpeg)解码数据。

此站点可以帮助您尝试编码或解码各种mime类型的图像。 http://freeonlinetools24.com/base64-image