如何在C#中用iTextSharp将Bitmap条码无需保存直接插入PDF
实现方案
该需求完全可以实现,以下是两种适配不同场景的实现方法:
方案1:适配现有HTML拼接逻辑(改动最小)
你可以将内存中的Bitmap转为Base64编码的Data URI,直接赋值给img标签的src属性,完全不需要写入本地磁盘。
需要用到System.IO和System.Drawing.Imaging命名空间,示例代码如下:
Barcode128 code128 = new Barcode128 { CodeType = Barcode.CODE128, ChecksumText = true, X = 1.1f, BarHeight = 20, GenerateChecksum = true, StartStopText = true, Code = "Angular 9" }; Bitmap bms = new Bitmap(code128.CreateDrawingImage(Color.Black, Color.White)); // 新增内存流转Base64逻辑 using (MemoryStream ms = new MemoryStream()) { // 把Bitmap写入内存流,可根据需要调整图片格式 bms.Save(ms, ImageFormat.Png); byte[] imageBytes = ms.ToArray(); string base64Img = Convert.ToBase64String(imageBytes); // 拼接Data URI格式的src string imgSrc = $"data:image/png;base64,{base64Img}"; // 替换原有路径拼接逻辑即可 sb.Append($"<img src='{imgSrc}'></img>"); }
注意:iTextSharp内置的HTML解析器(XMLWorkerHelper)原生支持Data URI格式的图片资源,无需额外配置。
方案2:更高性能的原生iTextSharp实现
如果可以调整现有PDF生成逻辑,不需要走HTML拼接的话,可直接将iTextSharp生成的条码对象插入PDF,不需要转Bitmap、Base64等中间步骤,性能更高:
// cb为当前PDF页面对应的PdfContentByte对象 Image barcodeImg = code128.CreateImageWithBarcode(cb, BaseColor.BLACK, BaseColor.WHITE); // 按需调整条码尺寸、位置 barcodeImg.ScaleToFit(100, 30); // 直接插入PDF文档对象 document.Add(barcodeImg);
内容的提问来源于stack exchange,提问作者Mritunjay Sharma
相关产品推荐
相关产品推荐

