在WPF中可以将多个xps文档合并为一个吗? [英] Can multiple xps documents be merged to one in WPF?

查看:67
本文介绍了在WPF中可以将多个xps文档合并为一个吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

WPF 中可以将多个 xps 文档合并为一个 xps 文档并显示在 DocumentViewer 中吗?
一个应用程序有 4 个小 xps 文档,每个文档都单独显示,但在其中一个地方,所有 4 个文档应显示为一个文档.我该怎么做?

Can multiple xps documents be merged to one xps document in WPF and shown in DocumentViewer?
An application has 4 small xps documents each displayed seperately, but in one of the places all 4 documents should be shown as one document. How do I go about it?

推荐答案

这里,targetDocument 是新文件的目标路径,list 是所有文档的列表合并.

Here, targetDocument is the target path of the new file and list is a list of all documents to be merged.

public void CreateXPSStreamPages(string targetDocument, List<string> list)
    {
        Package container = Package.Open(targetDocument, FileMode.Create);
        XpsDocument xpsDoc = new XpsDocument(container);
        XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDoc);

        SerializerWriterCollator vxpsd = writer.CreateVisualsCollator();
        vxpsd.BeginBatchWrite();
        foreach (string sourceDocument in list)
        {
            AddXPSDocument(sourceDocument, vxpsd);
        }
        vxpsd.EndBatchWrite();
        container.Close();            
    }

    public void AddXPSDocument(string sourceDocument, SerializerWriterCollator vxpsd)
    {
        XpsDocument xpsOld = new XpsDocument(sourceDocument, FileAccess.Read);
        FixedDocumentSequence seqOld = xpsOld.GetFixedDocumentSequence();
        foreach (DocumentReference r in seqOld.References)
        {
            FixedDocument d = r.GetDocument(false);
            foreach (PageContent pc in d.Pages)
            {
                FixedPage fixedPage = pc.GetPageRoot(false);
                double width = fixedPage.Width;
                double height = fixedPage.Height;
                Size sz = new Size(width, height);
                fixedPage.Width = width;
                fixedPage.Height = height;
                fixedPage.Measure(sz);
                fixedPage.Arrange(new Rect(new Point(), sz));
                //fixedPage.UpdateLayout();

                ContainerVisual newPage = new ContainerVisual();
                newPage.Children.Add(fixedPage);
                //test: add Watermark from Feng Yuan sample
                //newPage.Children.Add(CreateWatermark(width, height, "Watermark"));

                vxpsd.Write(newPage);
            }
        }
        xpsOld.Close();
    }

这篇关于在WPF中可以将多个xps文档合并为一个吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆