PDF to JPEG

Hi
I was wanting to write a script that converts a PDF to a JPEG - does anyone have a suitable script to get me started? There is one that comes as part of the Folder Actions examples in the OS, however, it generates a fuzzy low quality JPEG - does someone know how to modify the script so that it generates the best quality possible JPEG. All suggestions gratefully accepted

Here is the script I mean:


property done_foldername : "JPEG Images"
property originals_foldername : "Original Images"
property newimage_extension : "jpg"
-- the list of file types which will be processed 
-- eg: {"PICT", "JPEG", "TIFF", "GIFf"} 
property type_list : {"TIFF", "GIFf", "PNGf", "PICT"}
-- since file types are optional in Mac OS X, 
-- check the name extension if there is no file type 
-- NOTE: do not use periods (.) with the items in the name extensions list 
-- eg: {"txt", "text", "jpg", "jpeg"}, NOT: {".txt", ".text", ".jpg", ".jpeg"} 
property extension_list : {"tif", "tiff", "gif", "png", "pict", "pct"}


on adding folder items to this_folder after receiving these_items
	tell application "Finder"
		if not (exists folder done_foldername of this_folder) then
			make new folder at this_folder with properties {name:done_foldername}
		end if
		set the results_folder to (folder done_foldername of this_folder) as alias
		if not (exists folder originals_foldername of this_folder) then
			make new folder at this_folder with properties {name:originals_foldername}
			set current view of container window of this_folder to list view
		end if
		set the originals_folder to folder originals_foldername of this_folder
	end tell
	try
		repeat with i from 1 to number of items in these_items
			set this_item to item i of these_items
			set the item_info to the info for this_item
			if (alias of the item_info is false and the file type of the item_info is in the type_list) or (the name extension of the item_info is in the extension_list) then
				tell application "Finder"
					my resolve_conflicts(this_item, originals_folder, "")
					set the new_name to my resolve_conflicts(this_item, results_folder, newimage_extension)
					set the source_file to (move this_item to the originals_folder with replacing) as alias
				end tell
				process_item(source_file, new_name, results_folder)
			end if
		end repeat
	on error error_message number error_number
		if the error_number is not -128 then
			tell application "Finder"
				activate
				display dialog error_message buttons {"Cancel"} default button 1 giving up after 120
			end tell
		end if
	end try
end adding folder items to

on resolve_conflicts(this_item, target_folder, new_extension)
	tell application "Finder"
		set the file_name to the name of this_item
		set file_extension to the name extension of this_item
		if the file_extension is "" then
			set the trimmed_name to the file_name
		else
			set the trimmed_name to text 1 thru -((length of file_extension) + 2) of the file_name
		end if
		if the new_extension is "" then
			set target_name to file_name
			set target_extension to file_extension
		else
			set target_extension to new_extension
			set target_name to (the trimmed_name & "." & target_extension) as string
		end if
		if (exists document file target_name of target_folder) then
			set the name_increment to 1
			repeat
				set the new_name to (the trimmed_name & "." & (name_increment as string) & "." & target_extension) as string
				if not (exists document file new_name of the target_folder) then
					-- rename to conflicting file
					set the name of document file target_name of the target_folder to the new_name
					exit repeat
				else
					set the name_increment to the name_increment + 1
				end if
			end repeat
		end if
	end tell
	return the target_name
end resolve_conflicts

-- this sub-routine processes files 
on process_item(source_file, new_name, results_folder)
	-- NOTE that the variable this_item is a file reference in alias format 
	-- FILE PROCESSING STATEMENTS GOES HERE 
	try
		-- the target path is the destination folder and the new file name
		set the target_path to ((results_folder as string) & new_name) as string
		with timeout of 900 seconds
			tell application "Image Events"
				launch -- always use with Folder Actions
				set this_image to open file (source_file as string)
				save this_image as JPEG in file target_path with icon
				close this_image
			end tell
		end timeout
	on error error_message
		tell application "Finder"
			activate
			display dialog error_message buttons {"Cancel"} default button 1 giving up after 120
		end tell
	end try
end process_item

Browser: Safari 412
Operating System: Mac OS X (10.4)

Firstly, you should really have posted this to the “AppleScript | OS” X list. Hopefully a moderator will move it across for you.

Image Events doesn’t give you any control over the jpeg quality setting. Being the author of iMagine Photo I would recommend using it instead. Similar in idea to Image Events but much more powerful.

Where you have:


set the target_path to ((results_folder as string) & new_name) as string
tell application "Image Events"
	launch -- always use with Folder Actions
	set this_image to open file (source_file as string)
	save this_image as JPEG in file target_path with icon
	close this_image
end tell

replace it with (untested):


tell application "iMagine Photo"
	set this_image to import graphic source_file
	if the component error of this_image is not equal to 0 then
		close this_image
		return
	end if
	tell this_image
		make exporter with properties {export file type:"JPEG", export compression quality:lossless, export custom icon:true, export folder location:results_folder, export file name:new_name}
		export
	end tell
	close this_image
end tell

iMagine Photo is free and you can download it from: http://www.yvs.eu.com/downloading.html
I hope this helps. There is plenty of documentation if you want to do more with it.

Kevin

iMagine Photo is the best tool for processing image files using AppleScript: http://www.yvs.eu.com/

Browser: Safari 125.1
Operating System: Mac OS X (10.3.5)

Thanks for your suggestion - I didn’t use your script but the link to Imagine Photo was extremely helpful