【问题标题】:creating an XPS Document from a FlowDocument and attach it on the fly从 FlowDocument 创建 XPS 文档并即时附加
【发布时间】:2011-07-23 08:54:15
【问题描述】:

我有一个 FlowDocument,我想将其转换为 XPS 文档并将其附加到电子邮件中并一起发送。我正在使用此代码

 public static MemoryStream FlowDocumentToXPS(FlowDocument flowDocument, int width, int height)
    {
        MemoryStream stream = new MemoryStream();
        using (Package package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite))
        {
            using (XpsDocument xpsDoc = new XpsDocument(package, CompressionOption.Maximum))
            {                  
                XpsSerializationManager rsm = new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);
                DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator;
                paginator.PageSize = new System.Windows.Size(width, height);
                rsm.SaveAsXaml(paginator);
                rsm.Commit();                
            }
        }
        stream.Position = 0;
        Console.WriteLine(stream.Length);
        Console.WriteLine(stream.Position);
        return stream;   
    }

然后我使用此代码附加它:

Attachment xps = new Attachment(FlowDocumentToXPS(FD, 768, 676), "FileName.xps", "application/vnd.ms-xpsdocument");

其中 FD 是我要转换的 FlowDocument,我收到了 0.0KB 大小的 XPS 文件附件,并且无法使用 XPS 查看器打开,我在这里缺少什么?

编辑:工作的最终代码,请参阅 cmets

提前致谢

【问题讨论】:

  • 您确定您没有在某处吞下异常吗?我认为您不必添加 FixedSequence。
  • 也许流在离开 using 块时关闭
  • @Henk Holterman,我检查了输出,没有发生异常,你是对的,我正在尝试不同的东西来带来这个 FixedSequence ,我删除了但问题仍然存在
  • @Musaab:最简单的流是字节的顺序列表和指向最后一个字节的指针。当您写入支持 XPS 文档的流时,会添加额外的字节,并且指针再次移动到最后一个字节。如果您随后将该流交给在某处(文件、http 客户端)写入该流的其他人,如果您没有将该指针设置为流的开头,那么您将一无所获,因为指针位于流的末尾。通常您通过stream.Position = 0 完成此操作
  • @Musaab:如果没有看到您在代码中的哪个位置调用 FlowDocumentToXPS 并将其附加到电子邮件中,则无法回答。可能与很多事情有关,包括在收集支持流之后正在处理的电子邮件......您是否确保 1)流具有 >0 字节并且 2)在附加之前位置为 0?

标签: c# .net wpf flowdocument xpsdocument


【解决方案1】:

已解决,请参阅问题帖子下的 cmets 以及帖子本身已经完成的编辑

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 2011-02-17
    • 2010-09-26
    • 2018-01-09
    • 1970-01-01
    • 2014-03-20
    • 2012-03-15
    • 2013-11-09
    相关资源
    最近更新 更多