2017-12-06 26 views
-3

PDFsharp 및 MigraDoc을 사용하여 PDF를 생성하려고했습니다. 지금까지는 모든 것이 완벽하게 작동합니다.PDFsharp MigraDoc 런타임에 생성 된 비트 맵을 표 셀에 추가

이제 런타임 중에 비트 맵을 만들어 내 테이블 셀 중 하나에 추가하는 방법을 생각해 냈습니다.

하드 드라이브에 없어도 자원에서 비트 맵을 추가 할 수 있다는 것을 읽었습니다.

참조 : []

를 바이트 비트 맵을 변환

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 문자열이 잘 렸습니다).

나는 byte []로 정확하게 변환하지 않는다고 생각합니다.

누군가 나를 올바른 길로 인도 할 수 있습니까?

+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