當有人打印文檔(帶有 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);
}
}
}
- 1 回答
- 0 關注
- 239 瀏覽
添加回答
舉報
0/150
提交
取消