【问题标题】:Sending a PDFsharp document to WCF service and saving returns error "Cannot save a PDF document with no pages"将 PDFsharp 文档发送到 WCF 服务并保存返回错误“无法保存没有页面的 PDF 文档”
【发布时间】:2015-10-22 09:42:42
【问题描述】:

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

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 文档”

客户端中的文档包含一页,所以服务中的文档也应该包含一页对吗?

提前致谢。

【问题讨论】:

    标签: wcf bytearray pdfsharp


    【解决方案1】:

    你调用的方法有这个签名:public PdfDocument(Stream outputStream)

    描述如下:

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

    改用 PdfReader 类的 Open 方法:public static PdfDocument Open(Stream stream)

    【讨论】:

    • 感谢您的帮助。我最终走上了另一条路。我使用 File.WriteAllBytes 保存了 byte[]。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多