首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中使用ZipFile将XPS文件作为ZIP归档文件进行操作

在C#中使用ZipFile将XPS文件作为ZIP归档文件进行操作
EN

Stack Overflow用户
提问于 2017-01-22 08:18:37
回答 1查看 267关注 0票数 1

我正在尝试从XPS文件的FixedPage条目中删除一些节点。我编写了一个方法,以我想要的方式操作FixedPage的xml,并通过从xps中提取*.fpage文件并将它们放回原处来手动测试它。一切似乎都很好。因此,我开发了一个简单的实用程序来处理xps文件中的每个固定页面:

代码语言:javascript
运行
复制
var arch = ZipFile.Open(xpsFileName, System.IO.Compression.ZipArchiveMode.Update);

foreach (var entry in arch.Entries)
    if (entry.Name.EndsWith(".fpage"))
    {
        var file = entry.Open();

        var page = XElement.Load(file);
        page = ProcessPage(page);

        file.Position = 0;
        page.Save(file);
        file.SetLength(file.Position);

        file.Close();
    }

arch.Dispose();

尽管生成的xps-file保持了zip-archive的完整性,并且可以用unzip、7zip、windows explorer等解压,但Microsoft XPS查看器无法显示它,并显示一些错误消息(“无法打开此文档”或类似信息)。我很确定这个文件应该是有效的xps文件。此外,如果我使用前面提到的任何实用程序将其内容重新打包到一个新的zip文件中,并将其重命名为xps,则可以使用MS XPS查看器查看其内容。有没有人能把我推向正确的方向,或者告诉我我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-22 20:45:35

我没有想到xps实际上是一个.net包。我已经通过使用ZipPackage类解决了这个问题:

代码语言:javascript
运行
复制
    using (var pack = ZipPackage.Open(xpsFileName, FileMode.Open, FileAccess.ReadWrite))
    {
        foreach (var part in pack.GetParts()) if (part.Uri.OriginalString.EndsWith(".fpage"))
            {
                using (var file = part.GetStream(FileMode.Open, FileAccess.ReadWrite))
                {
                    var page = ProcessPage(XElement.Load(file));
                    file.Position = 0;
                    page.Save(file);
                    file.SetLength(file.Position);
                }
            }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41786005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档