将PDFsharp文档发送到WCF服务并保存返回错误"无法保存没有页面的PDF文档"

时间:2015-10-22 09:42:43

标签: wcf bytearray pdfsharp

我有一个由PDFsharp生成的PDF文档,并在WCF客户端中正确显示。该文档由一个页面组成,而该页面又包含一个图像。代码是:

PdfDocument d = new PdfDocument();
d.Info.Title = "Temporary Passport Document";
d.Info.Title = applicant.ApplID + " " + initials + " - Passport";

PdfPage p = new PdfPage();
d.AddPage(p);
XGraphics gfx = XGraphics.FromPdfPage(p);
XImage img = XImage.FromFile(passport.AttachmentPath);
p.Width = img.Size.Width + 40;
p.Height = img.Size.Height + 40;
gfx.DrawImage(img, 20, 20);

使用以下代码将PDF文档保存到byte []中( d 是PDFSharp文档, passport.PassportScan 是byte []):

MemoryStream ms = new MemoryStream();
d.Save(ms, false);
passport.PassportScan = ms.ToArray();  

将byte []发送到WCF服务以进行保存。因此,我将byte []转换回PDFsharp文档,并尝试使用以下代码保存它:

PdfDocument d = new PdfDocument(new MemoryStream(pPassport.PassportScan));
 d.Save(RecruitAidPathRoot + "100104 - JPD - John Paul Doe\\" + "JPD - file.pdf");

当执行最后一行时,我收到错误"无法保存没有页面的PDF文档"

该文档由客户端中的1页组成,因此服务中的文档也应该包含1页正确吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您正在调用的方法具有以下签名:public PdfDocument(Stream outputStream)

描述如下:

  

使用指定的流创建新的PDF文档。   在文档关闭之前不会使用流,此时文档会自动保存。   不要为使用此构造函数创建的文档调用Save(),只需调用Close()即可。   要打开现有的PDF文件,请使用PdfReader类。

使用PdfReader类的Open方法:public static PdfDocument Open(Stream stream)代替。