Обнаружьте, если файл PDF корректен (заголовок PDF) [закрытый]

20
задан R.J. Dunnill 16 May 2019 в 20:39
поделиться

4 ответа

1) К сожалению, нет простого способа определить, поврежден ли файл pdf. Обычно у проблемных файлов правильный заголовок, поэтому реальные причины повреждения различны. PDF-файл фактически представляет собой дамп объектов PDF. Файл содержит справочную таблицу, в которой указаны точные положения байтового смещения каждого объекта от начала файла. Так что, скорее всего, у поврежденных файлов есть сломанные смещения или может быть пропущен какой-то объект.

Лучший способ определить, что файл поврежден, - это использовать специализированные библиотеки PDF. Для .NET существует множество как бесплатных, так и коммерческих таких библиотек. Вы можете просто попробовать загрузить PDF-файл с помощью одной из таких библиотек. iTextSharp будет хорошим выбором.

2) В соответствии со ссылкой PDF заголовок файла PDF обычно имеет вид% PDF − 1.X (где X - число, пока от 0 до 7). И 99% PDF-файлов имеют такой заголовок. Но также есть некоторые другие типы заголовков, которые принимает Acrobat Viewer, и даже отсутствие заголовка не является реальной проблемой для средств просмотра PDF. Поэтому не следует рассматривать файл как поврежденный, если у него нет заголовка. Например. заголовок может находиться где-то в пределах первых 1024 байтов файла или иметь вид%! PS − Adobe − Nn PDF − Mm

Для вашей информации я разработчик библиотеки Docotic PDF .

18
ответ дан 29 November 2019 в 22:40
поделиться

Вы можете использовать iTextSharp , чтобы открыть и попытаться проанализировать файл (например, попытаться извлечь из него текст), но это, вероятно, перебор. Вы также должны знать, что это GNU Affero GPL , если вы не приобретете коммерческую лицензию.

1
ответ дан 29 November 2019 в 22:40
поделиться

Первая строка файла PDF - это заголовок, идентифицирующий версию спецификации PDF. которой соответствует файл %PDF-1.0, %PDF-1.1, %PDF-1.2, %PDF-1.3, %PDF-1.4 и т.д.

Вы можете проверить это, прочитав несколько байтов из начала файла и посмотрев, есть ли в начале заголовок для соответствия файлу PDF. Более подробную информацию см. в PDF reference от Adobe.

У меня нет для вас примера .NET (я уже несколько лет к нему не прикасался), но даже если бы он у меня был, я не уверен, что вы сможете проверить полное достоверное содержимое файла. Заголовок может быть в порядке, но остальная часть файла может быть испорчена (как вы сами сказали, некоторые файлы повреждены).

8
ответ дан 29 November 2019 в 22:40
поделиться

Я проверяю заголовок PDF следующим образом:

 public bool IsPDFHeader(string fileName)
    {
        byte[] buffer = null;
        FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
        BinaryReader br = new BinaryReader(fs);
        long numBytes = new FileInfo(fileName).Length;
        //buffer = br.ReadBytes((int)numBytes);
        buffer = br.ReadBytes(5);

        var enc = new ASCIIEncoding();
        var header = enc.GetString(buffer);

        //%PDF−1.0
        // If you are loading it into a long, this is (0x04034b50).
        if (buffer[0] == 0x25 && buffer[1] == 0x50
            && buffer[2] == 0x44 && buffer[3] == 0x46)
        {
            return header.StartsWith("%PDF-");
        }
        return false;

    }
35
ответ дан 29 November 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: