使用iTextSharp将WMF添加到PDF

时间:2011-02-08 16:43:45

标签: c# itextsharp

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

我的WMF文件来自Chart控件。

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

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

    添加此项
    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。

1 个答案:

答案 0 :(得分:3)

您可以尝试直接构建它,而不是调用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

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