2016-02-26 14 views
6

Basit bir işlem gerçekleştirmeye çalışıyorum: bir PDF dosyası içinde, PDF Framework dosyası kullanılarak, .NET Framework 4.0 ve MVC kullanarak PDFsharp v1.32.2608.0 ile oluşturulan bir fotoğrafın eklenmesi (JPG dosyası). Bu eylemi gerçekleştirmek için bir sonraki kod kullanıyorum NETPDFsharp, PDF biçiminde bir JPG hatası görüntüleniyor

:

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

sorun PDF dosyasını açtığınızda, görüntü kırık, yanlış bozuk görünür olmasıdır ... I do not Bunu nasıl açıklayacağınızı bilirseniz, sonucu görmek için orijinal fotoğrafı ve PDF'yi bir sonraki public Dropbox folder sürümünden indirebilirsiniz.

Bu hata tutarlı değil, bazı fotoğraflar bu sorunu çözüyor, bazıları çalışmıyor ve nedenini bilmiyorum. Belki de dosyadaki format ya da benzer bir şey var mı? Sorun buysa, hangi formatlar geçerlidir?

Herhangi bir yardım için teşekkür ederiz.

Düzenleme: Not ettiğim bir şey, PDF'yi görselleştirdiğim programa bağlı olarak yanlış görüntünün farklı görünmesidir. Örneğin, Dropbox'ın görselleştiricisini kullanarak PDF'yi görüyorsanız (sağlanan bağlantıyı kullanarak) görüntü iyi görünüyor; Chrome PDF Viewer'ı kullanırsam, görüntü yanlıştır, ancak yalnızca siyah beyaz ve çizgili ve görünür halde görünür; Adobe Acrobat Reader DC kullanıyorsam görüntü hala yanlıştır ancak tamamen tanınmaz.

Düzen 2: Kütüphanenin bir sorunu olup olmadığını görmek için PDFSharp v1.50.4000 (beta 3) olarak değiştirdim ancak sorun hala aynı. kod, yeni sürümü ile, şu şekilde olmaktadır: Eğer PDFsharp 1.50 kullanabilir veya sonrası ve XImage.FromStream yerine Image.FromStream artı XImage.FromGdiPlusImage kullandığınızda JPEG görüntülerin

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

Düzenlemenizi göz önünde bulundurduğunuzda muhtemelen jpg'nin kendisinde sorunlar var ... Bunu inceleme için paylaşabilir misiniz? – mkl

+0

@mkl Resim Dropbox'ta bulunabilir (kod kutusunun altındaki metne bakın). –

cevap

5

Bu i got çözüm sayesinde TH-Soft için PDFsharp forumdan bana yolunu göstermek için,: Ben PDF görüntü eklemeden önce

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

, çok PNG görüntüyü biçimi dönüştürme Görüntünün kaldırıldığı "sorunlar".

Tabii ki, en iyi çözüm değildir ve PDFsharp bu formatı yönetmelidir, ancak kısa bir süre sonra gerçekleşmez (en azından PDFsharp 1.5 beta3'te yönetilmez).

0

Taşıma daha iyi çalışır.

PDFsharp'ın JPEG dosyasının bir kopyası olması gerekir. XImage.FromStream kullanmak, PDFsharp'ın orijinal verileri almasını sağlar.

Windows XP'ye bağlıyorsanız, kodunuz PDFsharp 1.32 ile düzgün çalışacaktır. Daha sonra Windows sürümleri, gördüğünüz soruna sahiptir, ancak PDFsharp 1.50 ile yeniden çalışması gerekir.

+0

Merhaba, kardeşim. Bu işe yaramadı, ben PDFsharp projesini indirdim 1.5 beta3b (bulduğum son sürümü) ve projeye eklemek ama görüntü hala aynı sorunu var. –

+1

Evet, bu görüntü düzgün bir şekilde ele alınmadı, garip JPEG formatı. PDF dosyası Firefox ile görüntülendiğinde doğru görünüyor. Gelecek hafta bunu daha fazla araştıracak. Bu görüntüyü kullanmanız gerekiyorsa: bir görüntü işlemcisi ile açın (ör. MS Paint), ardından Dosya => Farklı Kaydet'i kullanın ve yeni görüntü PDFsharp ile çalışacaktır. –

+0

Teşekkürler, @ThomasH, bu sorunu çözdü. Bunun nihai bir cevap olup olmayacağını veya bu soru için sadece bir "yama" olup olmadığını hala bilmiyorum. Bunu bir cevap olarak gönderirseniz, ben glady bunu çözüm olarak işaretleyecektir. –

0

Resminiz bir CMYK JPEG'dir. PDF dosyasına gömüldüğünde, renk alanı RGB'ye ayarlanır ve bu yanlış kod çözüme neden olur.
Kodunuzdaki görüntü renk alanını CMYK olarak ayarlayabileceğinizi veya bu PDFsharp'ta düzeltilmesi gereken bir şey olup olmadığını bilmiyorum.

+0

PDFsharp, bir JPEG'nin RGB mi yoksa CMYK mı olduğunu belirlemek için GDI + veya WPF'ye dayanır. –

+0

Bu sorunu PDFsharp geliştiricilerine bildirmemiz gerektiğini düşünüyor musunuz? –

+0

Ne yazık ki, CMYK JPEG'lerle çalışırken hem GDI + hem de WPF buggy'dir. –

İlgili konular