将System.Drawing.Image写入PDF时转换iTextSharp.text.Image报错如何解决
错误根因
System.Drawing.Image与iTextSharp.text.Image是不同命名空间下的完全独立类型,无隐式转换规则,因此直接赋值会触发编译错误。
修复方案
将生成的二维码图片写入内存流后,通过iTextSharp提供的静态方法iTextSharp.text.Image.GetInstance()加载为iTextSharp兼容的图片对象即可。
核心修改代码
将原来的报错行:
Image jpg = qrcodeimage;
替换为以下代码:
using (MemoryStream ms = new MemoryStream()) { // 将System.Drawing.Image对象写入内存流,格式可根据需求调整为Png/Jpeg等 qrcodeimage.Save(ms, System.Drawing.Imaging.ImageFormat.Png); // 加载为iTextSharp可用的Image对象 iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(ms.ToArray()); // 可选:调整图片尺寸、对齐方式等属性 jpg.ScaleToFit(200, 200); jpg.Alignment = iTextSharp.text.Element.ALIGN_CENTER; doc.Add(jpg); }
完整修改后的button1_Click方法代码
private void button1_Click(object sender, EventArgs e) { Zen.Barcode.BarcodeDraw qrcode = Zen.Barcode.BarcodeDrawFactory.CodeQr; System.Drawing.Image qrcodeimage = qrcode.Draw(richTextBox1.Text, 50); using (SaveFileDialog sfd = new SaveFileDialog() { Filter = "PDF file|*.pdf", ValidateNames = true }) { if (sfd.ShowDialog() == DialogResult.OK) { iTextSharp.text.Document doc = new iTextSharp.text.Document(PageSize.A4.Rotate()); try { PdfWriter.GetInstance(doc, new FileStream(sfd.FileName, FileMode.Create)); doc.Open(); doc.Add(new iTextSharp.text.Paragraph(richTextBox1.Text)); // 替换原来的直接赋值代码 using (MemoryStream ms = new MemoryStream()) { qrcodeimage.Save(ms, System.Drawing.Imaging.ImageFormat.Png); iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(ms.ToArray()); jpg.ScaleToFit(200, 200); doc.Add(jpg); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Messege", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { doc.Close(); } } } }
内容的提问来源于stack exchange,提问作者Konstantinos K
相关产品推荐
相关产品推荐

