PDFsharp,在PDF中显示JPG时出错

时间:2016-02-26 20:04:44

标签: c# pdf jpeg pdfsharp

我正在尝试执行一个简单的操作:使用.NET Framework 4.0和MVC.NET在PDFsharp v1.32.2608.0中从头开始生成的PDF文件中添加照片(JPG文件)

我正在使用下一个代码来执行此操作:

PdfDocument doc = new PdfDocument();
PdfPage pag = doc.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(pag);

Image foto = Image.FromStream([stream]);
XImage xfoto = XImage.FromGdiPlusImage(foto);
gfx.DrawImage(xfoto, 30, 130, 380, 250);

MemoryStream stream = new MemoryStream();
doc.Save(stream, false);

问题是,当我打开PDF文件时,图像显示错误,损坏,破碎......我不知道如何解释它,你可以下载原始照片和下一个生成的PDF {{ 3}}查看结果。

这个错误不一致,有些照片有这个问题,有些则没有,我不知道为什么。也许是文件中的格式或类似的东西?如果这是问题,哪种格式有效?

任何帮助将不胜感激。

编辑:我注意到的是,根据我可视化PDF的程序,错误的图像看起来不同。例如,如果您使用Dropbox的可视化工具(使用我提供的链接)看到PDF,则图像看起来很好;如果我使用Chrome PDF Viewer,则图像错误,但只显示黑白,带条纹但仍然可见;如果我使用Adobe Acrobat Reader DC,图像仍然是错误的,但完全无法识别。

编辑2:我改为PDFSharp v1.50.4000(beta 3),看看它是否是库的问题,但问题仍然是一样的。新版本的代码如下:

PdfDocument doc = new PdfDocument();
PdfPage pag = doc.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(pag);

XImage xfoto = XImage.FromStream([stream]);
gfx.DrawImage(xfoto, 30, 130, 380, 250);

MemoryStream stream = new MemoryStream();
doc.Save(stream, false);

3 个答案:

答案 0 :(得分:7)

这是我得到的解决方案,感谢来自PDFsharp论坛的TH-Soft给我看路径:

PdfDocument doc = new PdfDocument();
PdfPage pag = doc.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(pag);

MemoryStream strm = new MemoryStream();
Image img = Image.FromStream([stream]);
img.Save(strm, System.Drawing.Imaging.ImageFormat.Png);

XImage xfoto = XImage.FromStream(strm);
gfx.DrawImage(xfoto, 30, 130, 380, 250);

MemoryStream stream = new MemoryStream();
doc.Save(stream, false);

在将图像添加到PDF之前,我将图像转换为PNG格式 图像所具有的“问题”将被删除。

当然,这不是最好的解决方案,PDFsharp应该管理这种格式问题,但它不会很快发生(至少不是在PDFsharp 1.5 beta3中管理)。

答案 1 :(得分:0)

使用PDFsharp 1.50或更高版本并使用XImage.FromStream代替Image.FromStreamXImage.FromGdiPlusImage时,JPEG图像的处理效果更佳。

PDFsharp需要JPEG文件的副本。使用XImage.FromStream可确保PDFsharp获取原始数据。

如果您坚持使用Windows XP,您的代码可以正常使用PDFsharp 1.32。以后的Windows版本会出现问题,但是使用PDFsharp 1.50它会再次运行。

答案 2 :(得分:0)

您的图片是CMYK JPEG。当它嵌入PDF文件时,其颜色空间设置为RGB,这会导致错误的解码 我不知道你是否可以将代码中的图像颜色空间设置为CMYK,或者这是否需要在PDFsharp中修复。

相关问题