#!/usr/bin/python # # Usage: imagestopdf [image-file ...] pdf-file # # This script creates the specified PDF file. The contents # of each image file are placed into the PDF, one per page. # import sys, os from Quartz.CoreGraphics import * from Quartz.ImageIO import * if len(sys.argv) > 2 : hasImages = False defaultPageRect = CGRectMake(0, 0, 612, 792) ctx = CGPDFContextCreateWithURL(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, sys.argv[-1], kCFURLPOSIXPathStyle, False), defaultPageRect, None) if ctx: for arg in sys.argv[1:-1] : image = None transform = None url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, arg, kCFURLPOSIXPathStyle, False) provider = CGDataProviderCreateWithURL(url) if provider: imageSrc = CGImageSourceCreateWithDataProvider(provider, None) if imageSrc: image = CGImageSourceCreateImageAtIndex(imageSrc, 0, None) if image is not None : imageSize = CGSizeMake(CGImageGetWidth(image), CGImageGetHeight(image)) xRes = 204.0 yRes = 196.0 imageProps = CGImageSourceCopyPropertiesAtIndex(imageSrc, 0, None) if imageProps is not None : tiffProps = imageProps[kCGImagePropertyTIFFDictionary] if tiffProps is not None : xRes = tiffProps[kCGImagePropertyTIFFXResolution] yRes = tiffProps[kCGImagePropertyTIFFYResolution] transform = CGAffineTransformMakeScale( 72.0/xRes, 72.0/yRes) if transform is not None : imageSize = CGSizeApplyAffineTransform(imageSize, transform) mediaBox = CGRectMake(0, 0, imageSize.width, imageSize.height) CGContextBeginPage(ctx, mediaBox) CGContextDrawImage(ctx, mediaBox, image) CGContextEndPage(ctx) hasImages = True else: print >> sys.stderr, 'imagestopdf: invalid image file "' + arg + '"' CGPDFContextClose(ctx) if hasImages is False: os.remove(sys.argv[-1]) sys.exit('imagestopdf: no images found!') else : print >> sys.stderr, 'Usage: imagestopdf [image-file ...] pdf-file' sys.exit(2)