C# PDFsharp,在PDF中显示JPG时出错

C# PDFsharp,在PDF中显示JPG时出错,c#,pdf,jpeg,pdfsharp,C#,Pdf,Jpeg,Pdfsharp,我正在尝试执行一个简单的操作:在使用.NETFramework 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([s

我正在尝试执行一个简单的操作:在使用.NETFramework 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生成的下一个看到的结果

这个错误是不一致的,有些照片有这个确切的问题,有些没有,我不知道为什么。可能是文件中的格式还是类似的?如果这是问题所在,哪些格式是有效的

任何帮助都将不胜感激

编辑:我注意到错误的图像看起来不同,这取决于我使用哪个程序可视化PDF。例如,如果您使用Dropbox的可视化工具(使用我提供的链接)看到PDF,图像看起来很好;如果我使用Chrome PDF查看器,图像是错误的,但仅以黑白显示,带有条纹,但仍然可见;如果我使用AdobeAcrobatReaderDC,图像仍然错误,但完全无法识别

编辑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);

当您使用PDFsharp 1.50或更高版本,并使用
XImage.FromStream
而不是
Image.FromStream
plus
XImage.FromGdiPlusImage
时,JPEG图像的处理效果更好

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


如果您坚持使用Windows XP,您的代码将可以与PDFsharp 1.32配合使用。稍后的Windows版本会出现您看到的问题,但使用PDFsharp 1.50时,它应该会再次工作。

您的图像是CMYK JPEG。将其嵌入PDF文件时,其颜色空间设置为RGB,这会导致错误解码。

我不知道您是否可以将代码中的图像颜色空间设置为CMYK,或者这是否需要在PDFsharp中修复。

这是我得到的解决方案,感谢PDFsharp论坛的TH软件为我显示路径:

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中没有管理)。

您好,兄弟。这不起作用,我下载了PDFsharp project 1.5 beta3b(我找到的最新版本)并将其添加到项目中,但图像仍然存在相同的问题。是的,此图像处理不正确,JPEG格式奇怪。使用Firefox查看PDF文件时看起来正确。我们将在下周对此进行进一步调查。如果必须使用此特定图像:使用图像处理器(例如MS Paint)打开,然后使用File=>Save As,新图像将与PDFsharp一起使用。谢谢,@ThomasH,解决了此问题。我仍然不知道这是否是一个最终答案,或者只是这个问题的“补丁”。如果你把这个作为一个答案发布,我很乐意将它标记为解决方案。考虑到你的编辑,jpg本身可能有问题。。。您可以共享它以供检查吗?@mkl该图像可以在Dropbox上找到(请参阅代码框下方文本中的链接)。PDFsharp依赖GDI+或WPF来确定JPEG是RGB还是CMYK。您认为我们应该向PDFsharp开发人员报告此问题吗?不幸的是,GDI+和WPF在处理CMYK JPEG时都有缺陷。对我来说是有效的(+1)。作为
[stream]
您可以使用
File.OpenRead(imgFilePath)