我完全无法使用iTextSharp将WMF文件转换为PDF。我特别想使用WMF,因为它是一个基于矢量的文件。
我的WMF文件来自Chart控件。
重现这一点的代码非常简单。
使用指令
添加此项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。
答案 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
这个特殊问题与渐变填充有关。