Невозможно распаковать поток содержимого спецификаций PDF - PullRequest
0 голосов
/ 14 марта 2019

Поток содержимого первой страницы спецификации PDF содержит слово stream, за которым следует CR LF, а затем байты: 9A FC 2C 16 E1 DB 83 80 92 08 82 AD 7A A1 .... Фильтр FlateDecode. Потоковый объект находится в позиции 0x4312.

Я не могу его расшифровать. Я получаю несколько байтов ерунды, а затем выдает исключение. Я пробовал:

  • .NET DeflateStream
  • DotNetZip DeflateStream
  • DotNetZip Zlib Stream
  • Мой LZW-декодер (проверено в другом месте)
  • My DeflateStream (проверено в другом месте)
  • Пропуск первых 2 байтов, как предложено в другом месте

PDF открывается в Acrobat. Acrobat Preflight показывает, что поток контента начинается с 'BT'.

Ответы [ 2 ]

3 голосов
/ 14 марта 2019

Документ зашифрован, как вы можете видеть, если открыть в текстовом редакторе, а в 5-й последней строке он содержит /Encrypt 126988 0 R, поэтому, вероятно, вы получаете глупость.Вы должны сначала расшифровать его, прежде чем сможете распаковать.Вы можете прочитать больше о шифровании в pdf в том же документе, который вы разместили, в разделе 7.6

0 голосов
/ 14 марта 2019

Объект потока в спецификациях говорит следующее: Содержимое (данные) строки или объекта потока в некоторых контекстах интерпретируются как коды символов в наборе символов PDFDocEncoding или UTF-16.

Я использовал следующее, чтобы получить значение:

            string pattern = "begin=\"(?'begin'[^\"]+)";
            string stream = "stream<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>";

            Match match = Regex.Match(stream, pattern);
            string begin = match.Groups["begin"].Value;
            byte[] beginBytes = Encoding.Unicode.GetBytes(begin);
...