2016-02-26 60 views
6

我在执行一个简单的操作:在使用.NET Framework 4.0和MVC的PDFsharp v1.32.2608.0从头开始生成的PDF文件中添加一张照片(JPG文件)。 NETPDFsharp,错误在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文件时,图像会出现错误,损坏,破碎......我不知道如何解释它,您可以下载原始照片和在下一个public Dropbox folder中生成的PDF以查看结果。

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

任何帮助将不胜感激。

编辑:我注意到的一点是,错误的图像看起来不同,这取决于哪个程序可视化PDF。例如,如果您使用Dropbox的可视化工具(使用我提供的链接)看到PDF,图像看起来很好;如果我使用Chrome PDF查看器,图像是错误的,但只出现在黑色和白色条纹,但仍然可见;如果我使用Adobe Acrobat Reader DC,图像仍然是错误的,但完全无法识别。

编辑2:我更改为PDFSharp v1.50.4000(测试版3),看看它可能是库的问题,但问题仍然是一样的。该代码,使用新版本,是如下:当您使用PDFsharp 1.50或更高版本,并使用XImage.FromStream代替Image.FromStreamXImage.FromGdiPlusImage

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); 
+0

考虑到你的编辑,这里可能存在JPG格式的问题......你可以分享它进行检查吗? – mkl

+0

@mkl可以在Dropbox上找到图像(请参阅下面的代码框中的文字链接)。 –

回答

5

这是我得到了解决,这要归功于TH-软从PDFsharp论坛给我的路径:

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中进行管理)。

0

JPEG图像的处理效果更好。

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

如果你坚持使用Windows XP,那么你的代码在PDFsharp 1.32下可以正常工作。以后的Windows版本有你看到的问题,但使用PDFsharp 1.50时,它应该再次运行。

+0

嗨,兄弟。这不起作用,我下载了PDFsharp项目1.5 beta3b(我发现的最后一个版本)并将其添加到项目中,但图像仍然存在相同的问题。 –

+1

是的,这个图像处理不正确,奇怪的JPEG格式。使用Firefox查看PDF文件时看起来正确。下周将进一步调查。如果您必须使用此特定图像:使用图像处理器(例如MS Paint)打开,然后使用File =>另存为,新图像将与PDFsharp一起使用。 –

+0

谢谢@ThomasH解决了这个问题。我仍然不知道这可能是最终答案,或者只是这个问题的“补丁”。如果您将此作为回答发布,我会将其标记为解决方案。 –

0

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

+0

PDFsharp依靠GDI +或WPF来确定JPEG是RGB还是CMYK。 –

+0

你认为我们应该向PDFsharp开发者报告这个问题吗? –

+0

不幸的是,在处理CMYK JPEG时,GDI +和WPF都有问题。 –