#!/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(CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, sys.argv[-1], len(sys.argv[-1]), False), defaultPageRect, None)
if ctx:
for arg in sys.argv[1:-1] :
image = None
transform = None
provider = CGDataProviderCreateWithFilename(arg)
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)