• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Checking whether a file is a genuine PDF file
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Checking whether a file is a genuine PDF file


  • Subject: Re: Checking whether a file is a genuine PDF file
  • From: Sherm Pendley <email@hidden>
  • Date: Sun, 4 Oct 2009 11:12:43 -0400

On Sun, Oct 4, 2009 at 8:07 AM, Squ Aire <email@hidden> wrote:
>
> I know that, in an open dialog for example, I can view all PDF files by just filtering using the "pdf" file extension. But that isn't good enough really, because a file can have the pdf extension without being a true PDF file.

>From /usr/share/file/magic :

    # pdf:  file(1) magic for Portable Document Format
    #

    0       string          %PDF-           PDF document
    >5      byte            x               \b, version %c
    >7      byte            x               \b.%c

So, a "real" PDF begins with "%PDF-", then two bytes with the major
and minor version numbers, respectively. See "man magic" for details.

> How can I check whether a file is indeed a true PDF file (that can be, for example, opened in Preview)? Would I be able to filter true PDFs file in an open dialog, or would I just have to stick to filtering with only the pdf extension in open dialogs, and later ignore the non-valid PDF files?

I would take the second approach. First, it's going to perform better;
to filter the list in an open dialog, you'd have to open and verify
every .pdf file in the directory being shown. You'd also need to
inform the user somehow why some supposedly-pdf files are not
selectable. Also, note that Preview's open dialog will allow you to
select any file with a .pdf extension, then alerts the user if the
file's contents aren't actually PDF data.

> Do you have sample code that checks whether a given file is a genuine PDF file?

Here's a simple command-line tool that checks a single file. Please
keep in mind, this is just an example! In the Real World(tm), you'd
want more robust error checking of the number of arguments given, the
size of the file before attempting to read the first 7 bytes, etc.

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

	NSString *filename = [[[NSProcessInfo processInfo] arguments] objectAtIndex:1];
	char buf[7];

	[[NSData dataWithContentsOfMappedFile:filename] getBytes:(void*)buf length:7];

	if (strncmp("%PDF-", buf, 5) == 0)
		NSLog(@"%@ is a PDF file, version %c.%c", filename, buf[5], buf[6]);
	else
		NSLog(@"%@ is not a PDF file", filename);

	[pool drain];
    return 0;
}

sherm--

--
Cocoa programming in Perl: http://camelbones.sourceforge.net
_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • RE: Checking whether a file is a genuine PDF file
      • From: Squ Aire <email@hidden>
    • Re: Checking whether a file is a genuine PDF file
      • From: Paul M <email@hidden>
References: 
 >Checking whether a file is a genuine PDF file (From: Squ Aire <email@hidden>)

  • Prev by Date: Clickable URLs in a UITextView
  • Next by Date: Re: Bundle is not using icon or CFBundleIdentifier
  • Previous by thread: Checking whether a file is a genuine PDF file
  • Next by thread: Re: Checking whether a file is a genuine PDF file
  • Index(es):
    • Date
    • Thread