为了账号安全,请及时绑定邮箱和手机立即绑定

在 C# 中编辑 XPS 打印后台文件(.SPL 扩展名)(另存为 Zip 问题)

在 C# 中编辑 XPS 打印后台文件(.SPL 扩展名)(另存为 Zip 问题)

PHP
慕侠2389804 2024-01-20 15:39:01
当有人打印文档(带有 XPS 打印路径)时,我想暂停打印作业并编辑 SPL(压缩 XPS 格式)文件。如果我用 7zip 编辑文件并保存。如果我恢复作业,文档打印没有任何问题。如果我使用 System.IO.Compression.ZipFile 类或 DotNetZip 库或 SevenZipSharp 库打开 SPL 文件,然后从 SPL 文件中提取文件并从 SPL 文件中删除该文件,然后再次将该文件添加到 SPL 文件中,它将生成完美的 zip 容器。我比较了原始 SPL 文件和使用 7zip、zipinfo、winrar 工具编辑的 SPL 文件,没有发现任何差异。容器中的所有文件都完全相同。我还检查了 CRC。当我打开、编辑和保存 zip 文件时,我不会更改有关压缩方法、压缩级别等的任何内容。正如我所说,两个 zip 文件看起来完全相同,但如果我计算原始和编辑后的 SPL 文件的 CRC,它们就不是了相同的。在我编辑后(仅提取页面文件,从容器中删除它,然后将其再次添加到容器中),如果我尝试恢复打印作业,我会在事件查看器中看到有关 PrintProcessor 的错误,并且无法打印它。编辑文件后我无法弄清楚发生了什么变化(不更改容器中的任何内容)。我要疯了。SPL 文件的 Zip 格式有任何规范吗?
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

如果我使用“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);

                }

            }

    }



查看完整回答
反对 回复 2024-01-20
  • 1 回答
  • 0 关注
  • 27 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信