2016-02-26 28 views
6

簡単な操作を実行しようとしています:.NET Framework 4.0とMVCを使用して、PDFシャープのv1.32.2608.0でゼロから生成されたPDFファイル内に写真(JPGファイル)を追加しています。 NETPDFshow、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を表示すると(リンクiを使用して)、画像は正常に表示されます。 ChromeのPDFビューアを使用している場合、画像は間違っていますが、白黒や縞模様でしか表示されません。 Adobe Acrobat Reader DCを使用している場合、画像はまだ間違っていますが、完全に認識されません。

編集2:私はPDFSharp v1.50.4000(beta 3)に変更して、おそらくライブラリの問題だが問題はまだ同じかどうかを確認しました。コードは、新しいバージョンで、次の通りである:あなたがPDFsharp 1.50以降を使用するとXImage.FromStreamの代わりImage.FromStreamプラスXImage.FromGdiPlusImageを使用するときにJPEG画像の

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

これは、私のパスを示し用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では管理されません)。

0

取扱いが良い作品。

PDFsharpにはJPEGファイルのコピーが必要です。 XImage.FromStreamを使用すると、PDFsharpが元のデータを確実に取得します。

Windows XPに固執すると、コードは1.32のPDFsharpで正常に動作します。後でWindows版には問題がありますが、PDFharp 1.50では問題はありません。

+0

こんにちは。それはうまくいきませんでした。私はPDFsharpプロジェクト1.5 beta3bをダウンロードしてプロジェクトに追加しましたが、イメージにはまだ同じ問題があります。 –

+1

はい、この画像は、奇妙なJPEG形式で正しく処理されません。 FirefoxでPDFファイルを表示すると正しく表示されます。これは来週さらに調査する予定です。この特定の画像を使用する必要がある場合は、画像プロセッサ(MS Paintなど)で開き、File => Save Asを使用してください。新しい画像はPDFsharpで使用できます。 –

+0

ありがとう、@トーマス、問題を解決しました。私はこれが最終的な答えか、この質問のための単なるパッチであるかどうかまだ分かりません。これを回答として投稿すると、gladyはそれを解決策としてマークします。 –

0

画像はCMYK JPEGです。 PDFファイルに埋め込まれている場合、その色空間はRGBに設定されており、不正なデコードが行われます。
コード内の画像の色空間をCMYKに設定できるかどうか、またはこれがPDFsharpで修正する必要があるかどうかはわかりません。

+0

PDFsharpはGDI +またはWPFを使用して、JPEGがRGBかCMYKかを判断します。 –

+0

この問題をPDFsharp開発者に報告する必要があると思いますか? –

+0

残念ながら、GDI +とWPFの両方がCMYK JPEGを扱うときにバグがあります。 –

関連する問題