我正在尝试从XPS文件的FixedPage条目中删除一些节点。我编写了一个方法,以我想要的方式操作FixedPage的xml,并通过从xps中提取*.fpage文件并将它们放回原处来手动测试它。一切似乎都很好。因此,我开发了一个简单的实用程序来处理xps文件中的每个固定页面:
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查看器查看其内容。有没有人能把我推向正确的方向,或者告诉我我做错了什么?
发布于 2017-01-22 20:45:35
我没有想到xps实际上是一个.net包。我已经通过使用ZipPackage类解决了这个问题:
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);
}
}
}
https://stackoverflow.com/questions/41786005
复制相似问题