使用iTextSharp将WMF添加到PDF

我完全无法使用iTextSharp将WMF文件转换为PDF。 我特别想使用WMF,因为它是一个基于矢量的文件。

我的WMF文件来自Chart控件。

重现这一点的代码非常简单。

  1. 创建一个新的Windows窗体项目。
  2. 将图表控件添加到Form 1。
  3. 然后添加以下代码:

添加此using指令

using iTS = iTextSharp.text; 

并将以下代码添加到您的Form1.cs文件中:

 private void Form1_Load(object sender, EventArgs e) { Document pdfDoc = new Document(); PdfWriter.GetInstance(pdfDoc, new FileStream(@"D:\dev\Test\TestPdfCreation\TestPdfCreation\bin\Debug\test.pdf", FileMode.Create)); MemoryStream mimg1 = new MemoryStream(); chart1.SaveImage(mimg1, ImageFormat.Wmf); mimg1.Seek(0, SeekOrigin.Begin); iTS.Image img1 = iTS.Image.GetInstance(mimg1); pdfDoc.Add(img1); pdfDoc.Close(); } 

我收到的错误是:发生IOException。 字节数组不是可识别的图像格式。

使用iTextSharp 5.0.5。

您可以尝试直接构建它而不是调用createImage:

 Image img = new ImgWMF( bytes ); 

虽然查看代码我看到你会得到一个不同的例外:

  InputMeta in = new InputMeta(is); if (in.readInt() != 0x9AC6CDD7) { throw new BadElementException(errorID + " is not a valid placeable windows metafile."); } 

这里的关键点可能是“可放置”。 我并不完全熟悉WMF,但您可以找到替代的ImageFormat或其他东西。

是的。 看起来像可放置的WMF是Aldus不久前发现的东西。 这是一个关于从WMF转换为iText可以使用的东西的问题:

http://itext-general.2136553.n4.nabble.com/WMF-file-doesn-t-display-correctly-td2283480.html

这个特殊问题与渐变填充有关。