2017-12-06 9 views
-3

PDFsharpとMigraDocを使用してPDFを生成したいと考えました。これまでのところ、すべてが完璧に動作します。PDFsharp MigraDocランタイムで生成されたビットマップをテーブルセルに追加

今、私はランタイム中にビットマップを作成し、それを自分のテーブルセルの1つに追加するアイディアを思いつきました。

私はハードドライブ上に置くことなく、リソースからビットマップを追加することが可能だと読んだことがあります。

を参照してください:[]

をバイトをビットマップに変換するための

Bitmap GreenDot = new Bitmap(32,32); 
Graphics GreenDotGraphics = Graphics.FromImage(GreenDot); 
GreenDotGraphics.FillEllipse(Brushes.Green,0,0,32,32); 

//The next step will be converting the Bitmap to an byte[] 

var byteGreenDot = ImageToByte(GreenDot); 

//Now converting it to string as seen in the WikiPage 

string stringGreenDot = Convert.ToBase64String(byteGreenDot); 
string FinalGreenDot = "base64:"+ stringGreenDot; 

//Now creating a table 
. 
. 
. 
cell = MyRow.Cell[1]; 
cell.AddImage(FinalGreenDot); 
. 
. 
. 

コード:ビットマップを作成するための

コード:これは私の試みは、私の小さなプロジェクトにそれを適応させることであるhttp://www.pdfsharp.net/wiki/MigraDoc_FilelessImages.ashx

public static byte[] ImageToByte(System.Drawing.Image img) 
{ 
    using(var ms = new MemoryStream()) 
    { 
     img.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp); 
     return ms.ToArray(); 
    } 
} 

コードを実行すると、警告が表示されます:画像 'base64:Qk02E [...] =='見つかりませんでした。 (base64文字列はこのポストのために切り捨てられました)。

私はそれをバイト[]に正しく変換しないと思います。

誰かが正しい軌道に乗ることができますか?

+1

'AddImage()'の最初のパラメータのデータ型が 'string'として定義されていませんか?これは、イメージオブジェクトが 'ToString()'を介して文字列に暗黙的に変換されるので、エラーメッセージを説明します。この場合、ストリームではなくファイル名を記述する必要があります(少なくとも私のプロジェクトではファイル名を渡す必要があります)。 – ViRuSTriNiTy

+0

リンク先のWiki記事をお読みください。 – SUM

+0

ええと、その記事は何を言っていますか? 'section.AddImage(imageFilename);' - 変数名に 'Filename'という単語がありますか?それで、私はあなたがファイル名を渡す必要があると書いたのです。 – ViRuSTriNiTy

答えて

-1

バージョン1.50で導入された機能を使用していることに注意してください。

バージョン1.32以前を使用している場合は、警告が表示されます。

バージョン1.50ベータ2以降を使用している場合、コードは正常に動作します。

+0

私は1.50を使用しています。これが私が不思議に思う理由です。正確に1.50.4589.0。 – SUM

+0

「PDFsharp-MigraDoc-WPF.1.50.4589-beta4」、「PDFsharp-MigraDoc-wpf.1.50.4619-beta4c」、および「PDFsharp-MigraDoc-wpf.1.50.4000-beta3b」の3つのNuGetパッケージを試してみました。 '。 Adobe Readerの[ドキュメントのプロパティ]ページには、PDFの作成に使用されたバージョンが表示されます。 –

+0

私はすべてのマシンを再起動し、前に使用した1.50 dllを再割り当てしてリセットしています。たぶんVSは野生になったのかもしれない。とにかくありがとうございます。 私のコードが最初から動作していたことを知りました;) – SUM

関連する問題