2016-02-26 62 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都有問題。 –