Как, наверное, многие знают, в PDF одним из возможных кодеков для внутренних потоков является Deflate.
Я пытаюсь разжать внутренний поток с помощью DeflateStream из BCL, но в результате получаю исключение вида InvalidDataException.
Я пытаюсь понять, как работает DeflateStream и пишу такой код:
var streamd = "2 J\r\nBT\r\n/F1 12 Tf\r\n0 Tc\r\n0 Tw\r\n72.5 712 TD\r\n" +
"[(Unfiltered streams can be read easily) 65 (, )] TJ\r\n"+
"\r\n0 -14 TD[(b) 20 (ut generally tak) 10 (e more space than \\311)] TJ\r\n" +
"T* (compressed streams.) Tj\r\n" +
"0 -28 TD\r\n[(Se) 25 (v) 15 (eral encoding methods are a) 20 (v) 25 (ailable in PDF) 80 (.)] TJ"+
"0 -14 TD\r\n(Some are used for compression and others simply) Tj\r\n" +
"T* [(to represent binary data in an ) 55 (ASCII format.)] TJ\r\n"+
"T* (Some of the compression filters are \\\r\n" +
"suitable ) Tj\r\nT* (for both data and images, while others are \\\r\n"+
"suitable only ) Tj\r\nT* (for continuous-tone images.) Tj\r\nET";
MemoryStream output = new MemoryStream();
DeflateStream zip = new DeflateStream(output, CompressionMode.Compress);
StreamWriter writer = new StreamWriter(zip);
writer.Write(streamd);
writer.Flush();
zip.Flush();
output.Flush();
output.Seek(0, SeekOrigin.Begin);
StreamReader reader = new StreamReader(output);
Console.WriteLine(reader.ReadToEnd());
Console.ReadLine();
В консоли пустота. Ставлю брекпоинт на output.Seek — в потоке 0 байт.
Может быть, кто-нибудь мне разъяснит три момента:
1. Где я мудак?
2. Почему DeflateStream не работает с PDF?
3. Почему не работает мой тестовый пример?