There is a dream that I will become specialized in one area, with my aspirations pointed towards network engineering. However, until I get there I will be good at everything, a jack-of-all-trades that seemingly cannot understand the meaning of “no”. This type of quality creates immediate opportunity that pays well but slows growth in specialized areas. My father always told me that I make too much to be rich, which I did not understand until I realized that my current efforts, which provide well, have a negative effect on crossing over into the entrepreneur realm.
Enough of that…today I step out of my Microsoft box and into the world of Apple and create some Automator workflows to combine multiple PDFs, in alphabetical order, from one folder and output into another folder.
The requirements of this task was to combine single page PDF files automatically, with the only user intervention being manual placement of the PDFs into a folder. This was accomplished with a two step process: (1) create the workflow in Automator; and (2) trigger the workflow using Apple’s Folder Actions feature.
For those that just want to steal, download here.
For me, this was the first time I have ever used Automator, and frankly, I was quite impressed with the ease and intuitive design. The basic process involved was to find the PDF files, sort that list, combine the PDFs, move that file to another location, add a date to the output file name and then remove the original list of PDF files.
As shown in the screen shot above, this is easily accomplished using predefined Automator Actions, which includes the PDF actions. The first action is “Find Finder Items”, which allows us to specify a directory and other variables, such as file name specifics. In this case, I said all files that have a name that ends with .pdf. The second action is named “Sort Finder Items”, which takes the list as passed from “Find Finder Items”, notice the linking arrows between actions, and sorts them by name. The third will use the “Combine PDF Pages” action and will take the sort list of PDFs and make them into one PDF file.
The combined PDF is created in a temporary location with a random file name. The fourth action, “Move Finder Items” moves that file to a specific folder. Finally, the last in this group of actions is the “Rename Finder Items (Add Date or Time to Finder Item Names)”, which I have specified to add a date to the front of the file name.
The last two actions are in a different group for the reason that I do not want to work with the files/folders and provided by the last action in the previous group. Instead, similar to the start of the first group, the first action in this group is “Find Finder Items”, which allows us to specify a folder (same directory) and other variables, such as file name specifics. In this case, I said all files that have a name that ends with .pdf. The second and last action in this group moves those files to the Trash.
Folder Actions employ AppleScripts that are triggered following a specific folder event. In this case and more common than not, the event is generally after files have been copied to the folder. As you may know, an AppleScript can accomplish a fair amount, including running Automator workflows and shell scripts. In this example, when we save the Automator workflow as a Plug-in, it will create two files, an application equivalent of the Automator workflow and an AppleScript that runs the Automator application.
To make an Automator workflow a folder action, you must save the Automator workflow as a “Plug-in”. At the Save As Plug-in dialog, you must choose ”Folder Actions” under “Plug-in for:” and then specify a folder to attach to. Name the plug-in accordingly and then click Save.
Now that you have added an Automator workflow, right click on the folder and click on “Attach a Folder Action”. Choose the appropriate AppleScript – usually the same name as the Automator workflow you just saved.
Assuming that Folder Actions are enabled and the script is set as a Folder Action to your folder, the Automator will run every time a file is copied into the folder.
Waiting until ALL Files are Copied
If you copy more than one file at a time into the folder, you will likely run into an issue with this Automator/AppleScript combination where the script will begin before all files are completed copying. This is easily remedied by employing the following script example:
On adding folder items to this_folder after receiving added_items If folderReady(this_folder) then --((your Automator “tell” line goes here)) End if End adding folder items to On folderReady(tFolder) Set myFolder to tFolder as alias Set firstSize to size of (info for myFolder) Delay 3 Set newSize to size of (info for myFolder) Repeat while newSize ≠ firstSize Set firstSize to newSize Delay 3 Set newSize to size of (info for myFolder) End repeat Return true End folderReady
This script was taken from an example on MacScripter.Net.