Как я могу определить, является ли файл файлом PDF?

db.collection.find({"createdDate":{$gte:new ISODate("2017-04-14T23:59:59Z"),$lte:new ISODate("2017-04-15T23:59:59Z")}}).count();

Замените collection именем коллекции, которую хотите выполнить запрос

30
задан f_puras 16 August 2015 в 16:31
поделиться

3 ответа

вы можете узнать mime-тип файла (или байтовый массив), поэтому вы не будете тупо полагаться на расширение. Я делаю это с помощью Aperture MimeExtractor ( http://aperture.sourceforge.net/ ), или несколько дней назад я видел библиотеку только для этого ( http://sourceforge.net/projects/mime -util )

Я использую aperture для извлечения текста из различных файлов, не только из pdf, но мне нужно настроить мысли, например, для pdf (aperture использует pdfbox, но я добавил другую библиотеку в качестве запасного варианта, когда pdfbox не работает)

9
ответ дан 27 November 2019 в 22:08
поделиться

Файлы PDF начинаются с "% PDF" (откройте один в TextPad или аналогичном и посмотрите)

По какой-либо причине вы не можете просто прочитать файл с помощью StringReader и проверить это?

4
ответ дан 27 November 2019 в 22:08
поделиться

Вот что я использую в своих тестах NUnit, которые должны проверяться на наличие нескольких версий PDF, сгенерированных с помощью Crystal Reports:

public static void CheckIsPDF(byte[] data)
    {
        Assert.IsNotNull(data);
        Assert.Greater(data.Length,4);

        // header 
        Assert.AreEqual(data[0],0x25); // %
        Assert.AreEqual(data[1],0x50); // P
        Assert.AreEqual(data[2],0x44); // D
        Assert.AreEqual(data[3],0x46); // F
        Assert.AreEqual(data[4],0x2D); // -

        if(data[5]==0x31 && data[6]==0x2E && data[7]==0x33) // version is 1.3 ?
        {                  
            // file terminator
            Assert.AreEqual(data[data.Length-7],0x25); // %
            Assert.AreEqual(data[data.Length-6],0x25); // %
            Assert.AreEqual(data[data.Length-5],0x45); // E
            Assert.AreEqual(data[data.Length-4],0x4F); // O
            Assert.AreEqual(data[data.Length-3],0x46); // F
            Assert.AreEqual(data[data.Length-2],0x20); // SPACE
            Assert.AreEqual(data[data.Length-1],0x0A); // EOL
            return;
        }

        if(data[5]==0x31 && data[6]==0x2E && data[7]==0x34) // version is 1.4 ?
        {
            // file terminator
            Assert.AreEqual(data[data.Length-6],0x25); // %
            Assert.AreEqual(data[data.Length-5],0x25); // %
            Assert.AreEqual(data[data.Length-4],0x45); // E
            Assert.AreEqual(data[data.Length-3],0x4F); // O
            Assert.AreEqual(data[data.Length-2],0x46); // F
            Assert.AreEqual(data[data.Length-1],0x0A); // EOL
            return;
        }

        Assert.Fail("Unsupported file format");
    }
22
ответ дан 27 November 2019 в 22:08
поделиться
Другие вопросы по тегам:

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