2011-05-31 18 views
18

Bir bayt [] açılmadan pdf olup olmadığını kontrol etmenin bir yolu var mı?Bir bayt [] 'ın bir pdf dosyası olup olmadığını belirleme

Pdf küçük resimleri olarak bayt [] listesini görüntülemek için kodum var. Daha önce bütün baytların [] pdf olduğunu biliyordum çünkü servleti sadece bunlara döndürmek için filtreledik. Şimdi gereksinim değişti ve tüm dosya türlerini geri getirmem gerekiyor. Byte [] 'ın ne olduğunu ya da daha özel olarak bir pdf olup olmadığını kontrol etmenin herhangi bir yolu var mı?

+1

Belki bu biraz yardım olabilir: http://stackoverflow.com/questions/2731917/how-to-detect-if-a -file-is-pdf-or-tiff –

+1

-1: Bir hex editörü açın ve bir PDF dosyasının başlığına bakın. Zor değil. Yanıt: '% PDF', ilk 4 bayttır. – leppie

+0

@leppie: Bazı formatlar böyle özelliklere sahip değildir (örneğin, csv gibi). Yani, "resmi" belirtimi bulana kadar - sadece "bir hex editörü açmak" çok kötü. Örneğin, JPEG formatı çok kolay değil :) – chopikadze

cevap

39

Dizinin ilk 4 baytını kontrol edin. Bu 0x25 0x50 0x44 0x46 ise

o zaman büyük ihtimalle bir PDF dosyası var.

+0

Bir sebepten dolayı oylama yapmak istediğimde bu cevabı reddettim. Ve şimdi değiştiremem. –

+4

Bu cevabı birkaç yıl kullandım ve şimdi 0xEF 0XBB 0XBF ile başlayan bir PDF dosyasına bakıyorum. Herhangi bir fikir? – MichaelD

+4

Bu baytların bir UTF-8 biçimlendirilmiş PDF'ye önceden eklenmiş görünüyor. Bu, körü körüne 0x25 0x50 ... – MichaelD

8

Bildiğim kadarıyla %PDF tüm PDF'nin başlangıç ​​biliyorum, bu yüzden bu dize karşı ilk bayt kontrol edebilir şekilde.

14

İlk dört bayt, 0x25 0x50 0x44 0x46 olmalıdır (onaltılık biçimde, ASCII içinde %PDF'dur). "Sihirli numaralar" Başka formatları için işaretli cevap ve diğer cevaplar doğru olsa da, zaman başarılı% 100 olmayacak here

3

bulabilirsiniz. Sorun, PDF özelliğinin% PDF-1.x'in yalnızca ilk 1024 baytta olması gerektiğini ve ilkini değil 4 olduğunu söylüyor. Bazı programlar% PDF'den önce bilgi ekleyecek ve hala geçerli olacaktır.

aşağıdaki yığın taşması soru için cevap görmesini tavsiye ederim: How to detect if a file is PDF or TIFF?

+1

* kontrol edemediğiniz anlamına gelir. Sorun, PDF spesifikasyonunun% PDF-1.x'in sadece ilk 1024 baytta olması gerektiğini ve ilk 4 * olmadığını belirtmesidir. - Bu yanlıştır, belirtim (ISO 32000-1) açıkça şöyle diyor: "** Bir PDF dosyasının ilk satırı,% 5 karakterinden oluşan bir başlık olmalıdır. Bunu takiben, 1.N formunun numarasıdır. Burada N, 0 rakamıdır. ve 7 ** ". Adobe PDF referansları bile benzer şekilde "PDF dosyasının ilk satırı, dosyanın uygun olduğu PDF belirtiminin sürümünü belirleyen bir başlıktır ve belirtimle aynı varyantları sunar." Sadece ... – mkl

+0

... Sadece Adobe PDF referanslar *** uygulama notları *** diyor ki "** Acrobat izleyiciler sadece başlık, dosyanın ilk 1024 bayt içinde bir yerde görünür." , "Bazı programlar% PDF'den önce bilgi ekleyecektir ve hala geçerli olacaktır." yanlış, oluşturulan PDF'ler *** geçerli değil ***, onlar sadece kırık olmasına rağmen bir dizi izleyici tarafından kabul ve görüntülenir; Ayrıca çok sayıda başka PDF işlemcisi tarafından reddedilir. – mkl

+0

% PDF-1.x için değerler ilk birkaç karakterden daha ileride görünebilir ve bahsettiğinizin aksine geçerli olabilir. İlk 8 karakterin dışında% PDF-1.x içeren birkaç geçerli Pdf dosyası var.Bu nedenle, bu sorunu çözmek için iyi bir cevap aramamın nedeni. Ne yazık ki 1 mesajın hepsi ilk birkaç karakteri kullanıyor ve% PDF-1.x ile eşleşiyor. Geçerli olan ve bu yaklaşımı çözemeyen birkaç dosyaya sahip olmak, yalnızca ilk birkaç karakteri kontrol etme yönteminin her zaman geçerli olmadığını, yazımda söylediğim gibi ve diğer yöntemi önerdiğimi belirtmeme neden oldu. –

İlgili konular