Редактирование буферных файлов печати XPS (расширение .SPL) в C # (проблема сохранения Zip) - PullRequest
0 голосов
/ 27 сентября 2019

Когда кто-то печатает документ (с путем печати XPS), я хочу приостановить задание печати и отредактировать файл SPL (в формате zips в формате XPS).

Если я отредактирую файл с помощью 7zip и сохраню.Если я возобновлю работу, этот документ печатается без проблем.

Если я открою файл SPL с помощью класса System.IO.Compression.ZipFile или библиотеки DotNetZip или библиотеки SevenZipSharp, извлеките файл из файла SPL и удалите этот файл изSPL-файл и добавьте этот файл снова в SPL-файл, он генерирует совершенно прекрасный почтовый контейнер.Я сравнил исходный файл SPL и отредактировал файл SPL с помощью 7zip, zipinfo, инструментов winrar и не увидел никакой разницы.Все файлы в контейнере одинаковы.Я также проверил CRC.

Когда я открываю, редактирую и сохраняю zip-файл, я ничего не меняю в способе сжатия, уровне сжатия и т. Д. Как я уже сказал, два zip-файла выглядят точно так же, но если ярассчитать CRC исходных и отредактированных файлов SPL, они не совпадают.

После того, как я отредактировал (просто извлекаю файл страницы, удаляю его из контейнера и снова добавляю его в контейнер) Если я пытаюсь возобновить задание на печать, я вижуошибка в средстве просмотра событий о PrintProcessor, и я не могу напечатать его.

Я не могу понять, что меняется после того, как я отредактировал файл (ничего не меняя в контейнере).Я схожу с ума.

Есть ли какие-либо спецификации относительно формата Zip файлов SPL?

1 Ответ

0 голосов
/ 30 сентября 2019

Проблема решается, если я использую класс "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);
                }
            }
    }
...