0

当有人打印文档(使用 XPS 打印路径)时,我想暂停打印作业并编辑 SPL(压缩 XPS 格式)文件。

如果我用 7zip 编辑文件并保存。如果我恢复文件打印的工作没有任何问题。

如果我使用 System.IO.Compression.ZipFile 类或 DotNetZip 库或 SevenZipSharp 库打开 SPL 文件并从 SPL 文件中提取文件并从 SPL 文件中删除该文件并将该文件再次添加到 SPL 文件中,它会生成非常好的 zip 容器。我将原始 SPL 文件和编辑过的 SPL 文件与 7zip、zipinfo、winrar 工具进行了比较,我没有发现任何区别。容器中的所有文件完全相同。我还检查了CRC。

当我打开、编辑和保存 zip 文件时,我不会更改任何关于压缩方法、压缩级别等的内容。正如我所说的,两个 zip 文件看起来完全一样,但如果我计算原始和编辑的 SPL 文件的 CRC,它们不是相同的。

在我编辑后(只是提取一个页面文件,从容器中删除它并再次将其添加到容器中)如果我尝试恢复打印作业,我会在事件查看器中看到有关 PrintProcessor 的错误并且我无法打印它。

编辑文件后我无法弄清楚发生了什么变化(不更改容器中的任何内容)。我要疯了。

是否有关于 SPL 文件的 Zip 格式的规范?

4

1 回答 1

0

如果我使用“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);
                }
            }
    }
于 2019-09-30T07:58:45.950 回答