Advertisements

Variable QR codes? Sort of possible…

splash

UPDATE 2014-07-22: Since the release of Adobe InDesign CC 2014, variable QR codes via Data Merge is now possible. A post will be written about this feature once it has been thoroughly tested, but in the meantime this article has been edited to reflect the update.

Since the invention of QR codes, a burning question has been “how to incorporate these barcodes into a Data Merge?” There are lots of ways to generate one-off QR codes such as:

  • QR code generating websites;
  • An InDesign Javascript written by Jongware that is suitable for CS4-6;
  • Built into InDesign CC and above; and
  • Third party plug-ins that offer one-off creation as a “taster”.

But what if there are 30, 300, 3,000 or 30,000+ codes that need to be made as a direct mail campaign? Creating 30,000 QR codes is not a task that anyone would want to do individually.

So can Adobe InDesign, fresh from the shelf, create a Data Merge with variable QR codes? Apart from the latest release of Adobe InDesign CC 2014, no – not without the use of a third party plug-in. However, this workaround does the next best thing: Creates lots of QR codes all at once, export them as uniquely named PDFs for reference in a Data Merge, and then use the built-in Data Merge feature from InDesign.

The following example is a business card for fictional clothing manufacturer “Mean Jeans”. The client would like QRcodes that feature the staff member’s email address, and if no email address appears then no QR code needs to appear. The client has supplied the database in Microsoft Excel.

There is a way to automate this task thanks to three scripts

  • QRcode.jsxbin by Jongware (as previously mentioned). When this script is used on its own, a user interface appears asking the user for the text to be coded and then a level of error correction. Jongware did allow other scripts to call upon the QRcode script, and that leads into the next script;
  • A slight modification of a script supplied by an Adobe Forums user by the handle of sergemca. The original script (found in the same Adobe Forum link as Jongware’s QRcode.jsxbin) by sergemca searched an open InDesign document for any textboxes that contained the starting words MECARD: and would then convert the contents of the complete textbox into a QR code and then apply formatting such as scaling and rotation. As this example is creating QRcodes from email addresses, the modification in this example searches an open InDesign document for any textboxes that contain the starting word mailto: . Modifications to this script are best dealt with by the scripting forum of the Adobe InDesign forum.
  • PDFStyleExporter.jsxbin by Loic Aigon. This script has featured on Colecandoo before and it is used to split a large InDesign file into single page PDFs with unique names. While researching this story I have noticed that Loic will update this script in due course, so stay tuned.

To create variable QR codes:

  1. Open the Excel file and create two fields in the database in addition to the other fields that need to appear: order, and ‘@QRcode (the ‘ will disappear in Excel after it is typed, this is intentional). In the order column, use the autofill function of Excel to add sequential numbers to this column. Leave the contents of the @QRcode field for now.1qr
  2. Save the Excel file but also save it as a “Windows Formatted Text .txt” file, and give it a name that reflects that this database is purely for the QRcoding only e.g. forcodingonly.txt2qr
  3. In Adobe InDesign, create a new file that will be used to create the QR codes first. In this example, a file that is business card size has been created (90x55mm). Once open, go to the Data Merge panel and select the data source as the recently created txt file. Once the data is available in the Data Merge panel, create two text boxes. One with the word mailto: followed by the <email> field, and another text box with the <order> field. The document should look like this3qr
  4. The order text will provide the filename in a later script, but it also must appear in the file but not get in the way of the QRcode graphic that will appear later. To make sure that this text will be live but not output in the resulting QRcode, select the textbox containing the <order> field, give the text a paragraph style called “order” – the only change is that it has no fill and stroke. Also, align the text box to be in the centre of the page. The document should now look like this4qr
  5. From the Data Merge panel, select “Create Merged Document” and merge to a new single page document.5qr
  6. This will create a large document that will contain one mailto: address per page. It is important at this stage that any mailto: addresses that don’t have email addresses in the text boxes be deleted (or else the QRcode script will make QRcodes that contain the word “mailto:” only and clearly won’t work). To delete these addresses open the Find/Change dialog box and in the GREP panel type in the word mailto:$ , leave the change field blank (as well as the formatting fields) and click Change All.6qr
  7. The document is ready to have the QR codes applied. To do this, the altered version of sergemca’s script needs to be run.
var _d = app.documents[0];
var _allStories = _d.stories;
for(var nx=_allStories.length-1;nx>=0;nx--){
    var _storyAllTextFrames = _allStories[nx].textContainers;
    for(var mx=_storyAllTextFrames.length-1;mx>=0;mx--){
         _storyAllTextFrames[mx].select(); // change page
         if(_storyAllTextFrames[mx].contents.indexOf('mailto:')==0){
             var obj = app.doScript(new File(app.activeScript.path+'/qrcode.jsxbin'), ScriptLanguage.JAVASCRIPT, [_storyAllTextFrames[mx].contents, 3], UndoModes.ENTIRE_SCRIPT);
             _storyAllTextFrames[mx].contents = "";
         };
    };
};

7qr

If done successfully, the InDesign file should now contain QRcodes in place of the text that contained the email addresses.

To export these QRcodes with their unique names

  1. Run the script PDFStyleExporter.jsxbin (called PDFExportCropper.jsxbin on my machine)8qr
  2. In the user interface that appears, select the paragraph style “order” and leave the rest of the dialog box as it is. In the PDF options dropdown field, select the destination to save the resulting PDFs. Once done, click the Export button.9qr

Again, if done successfully, the resulting PDF QR codes should now save to the nominated directory.

There are other ways to export single page PDFs but Loic’s script is used in the example in case a reference other than a sequential number is to be used, such as a person’s name, phone number, etc.

To incorporate these QR codes into the data merge:

  1. Return to the Excel file and in the @QRcode field, use the CONCATENATE function to take the order number and apply the .pdf suffix to it. The formula to use is: =CONCATENATE(A2,”.pdf”)10qr
  2. Save the Excel file and again, also save it as a “Windows Formatted Text .txt” file, and give it a name that reflects that this database has been qrcoded QRcoding only e.g. qrcoded.txt
  3. In Adobe InDesign, create (or open) the card that needs the QRcodes applied. Once ready for the data, go to the Data Merge panel and select the data source as the newly created txt file. Place the name, address references etc as necessary, and create a frame for the QR codes to appear.11qr
  4. Apply the qrcode field to this frame and go to the Data Merge panel and select Content Placement Options. In the dropdown field “Image Placement” select the fitting “Fill frames proportionally”.12qr
  5. Instead of using the “preview” function, go to the Data Merge panel and select the Export to PDF function and export one record only. In the example, page 7 was chosen at random.13qr
  6. Once satisfied that the merge looks like it will work, again use the Export to PDF function to export the entire merge to a PDF.

For the barcodes to fit the image, the PDFs need to import PDFs based on the bounding box. If the images are not fitting the frame properly, an additional script originally by Dave Saunders (but improved upon by Marc Autret) will allow the import option to change. The script is available from this forum and once loaded and run into InDesign, the option to select is “Content All Layers”

14qr

So there it is. It is worth noting that this is a workaround and not a direct live Data Merge solution. There are limitations to this solution:

  • Resulting codes can’t be colorised on-the-fly;
  • If the database changes, this will mean repeating the entire process, rather than simply updating the data in the data merge file once, and removing all  QRcodes created previously.
  • Because the codes are not human readable without a decoder, there is added emphasis to check, recheck and check again to make sure the merge is behaving properly.

While this is a workaround, there is no doubt that a turnkey solution is preferable. There are enough third party providers making variable barcode solutions for Adobe InDesign. The full list is available here. From memory here is a list of third party providers that provide variable QR codes as part of a complete VDP package:

  • Rorohiko’s Tada QR;
  • XMPie’s uDirect;
  • Meadows Publishing Software
  • Cacidi LiveMerge;
  • Teacup Software’s BarcodeMaker;
  • DirectSmile;
  • Objectif Lune’s Printshop Mail;

Several edits since this was first published:

  • Added a list of third party providers who provide variable QR codes and moved a reference to an individual one earlier on in the article into that list;
  • Fixed type within field chevrons that did not appear when the article was published;
  • Acknowledged that variable QR codes via Data Merge are now possible in Adobe InDesign CC 2014
Advertisements

Breaking up is hard to do… InDesign files into individual PDFs that is!

UPDATE 2015/9/8: I have created a solution that will save uniquely-named InDesign or PDFs from a Data Merge. See more about this script here.

Several forums dedicated to InDesign advice have recently been asked the following question: “How to split an InDesign file into single page PDFs”.

Splitting a large PDF into single page PDFs is possible via the extract pages feature of Acrobat 9 and up. The resulting pages are then extracted to the same file location as the original PDF but contains an underscore and page number in the filename.

dm2un1

Splitting a large PDF into fixed page lengths (e.g. singles, doubles etc) is possible via the Split Document feature of Acrobat X and up. This also provides limited control concerning the name and location of the resulting split PDFs, as well as other ways of splitting the PDF (e.g. filesize or bookmarks).

dm2un2

So splitting a large PDF into smaller PDFs is possible via Acrobat. However, the brief was “How to split an InDesign file into single page PDFs”.

By default, there is no way to do this directly from InDesign without a script.

UPDATE 2014/8/24: I have written an article for indesignsecrets.com that demonstrates two possible ways of doing this via InDesign that do not require any scripting, but they are not one-step solutions.

However, there are at least four scriptable solutions available as of this moment:

  1. Scripter Loic Aigon produced a script called Custom Export – an InDesign javascript that behaves in a similar fashion to the Split Document feature of Acrobat, but without leaving InDesign.
  2. (updated 5 November 2013) Scripter Dmitry Lapaev offers three scripted solutions, but of these there are two that will be of most use to those who intend to output to print: the first is Quick Export to Adobe PDF  (see this link here) and the next is Batch Export to PDF (see this link here).
  3. Yet another javascript with a more sophisticated interface is Scott Zanelli’s Page Exporter Utility that had been discussed on this blog before. Read more about the script here.
  4. Fellow wordpresser Macgrunt has also produced an applescript that allows the export of single page PDFs from one InDesign file. While it does not have a user interface, it certainly does the job. Read more about his script here and read his related blog posts concerning renaming of files.

UPDATE 2014/1/18: There are also paid solutions that can accomplish this task. One such solution is PDF Bee by Chris Paveglio. This has not been tested by Colecandoo, nor is this a paid endorsement.

UPDATE 2014/8/1: There is a new standalone application that allows InDesign to reference an Excel file and prepare single record PDFs. This recent application again has not been tested by Colecandoo, nor is this a paid endorsement.

So the question is answered… right? Yes and no. Yes, it is possible to export to individual or smaller page PDFs, but the naming of the files could be better.

Using an example of business cards that have been data-merged to a new InDesign file, the brief is now to produce PDFs with filenames that reflect the names of the people on the business cards. Using the earlier solutions, the files would still need to be renamed afterwards. So how is this done?

SOLUTION ONE: Loic Again!

Loic has another script called PDF Export Cropper. This script is much more flexible than the previous scripts in that files can be split according to more variables, and the file naming is more flexible. To demonstrate, an example single sided business card has been created. The PDFs are to be named based upon the name of the person, so the field that holds the client’s name has been assigned a special paragraph style that is used nowhere else on the card – in this instance, the style “clientname” has been assigned.

dm2un4

The file is then merged to a new InDesign file. Once the new file is created, the PDF Export Cropper script is run.

dm2un5

A new user interface appears. In this example, within the “Choose Identifier” portion of the interface, the appropriate paragraph style has been chosen. The filename is to be the name of the resulting paragraph style, so all that is left to do is click Export.

dm2un6

And voila! The PDFs are split and named based on the client name that appears on the business card.

The only downside – that the cards can only be one page (that is, if the business cards were double-sided, Loic’s script would not work).

UPDATE 2014-01-14: Loic’s scripts are currently being revised and at the time of writing this update are unavailable. See his post here.

SOLUTION TWO: Hans Haesler

German Swiss scripter Hans Haesler has a similar script to Loic’s script. Sadly for me, it is in German, so I can’t understand the user interface that the script creates. A link to the script and a brief how-to-use for Anglophones is available here.

SOLUTION THREE: Via Adobe Acrobat

Unlike the previous two solutions, this solution requires the data merge file to be merged to one large PDF. It also requires that the field from the database that contains the names to become the future filenames is called PartnerHQ_Id. From here, an Acrobat action has to be run. The action is available from here:

UPDATE 2014/7/19: There is an update to this script available from the original forum that discussed the initial solution. The update allows the PDF to be split into files longer than one page in size. See post 11 in that particular forum for the script.

First, the action will have to be loaded by opening Acrobat, select the File Menu, Action Wizard, Edit Actions. From the new window, select Import and then navigate to the downloaded split files.sequ file.

dm2un6a

Next, create a new folder and copy the PDF to merge and the csv or txt file that was used for the data merge into that folder.

dm2un7

Once this is done, open the PDF to be split using Adobe Acrobat and from the File Menu, select Action Wizard, split file

dm2un8

A new window will open, and the file that is already opened should be listed in the window. Click Next.

dm2un9

The actual javascript to be run will open as a window. Click OK.

dm2un10

At this stage, the script presents an error. Click Close.

dm2un11

Voila! The PDFs are renamed based on the client names. The folder also contains the original PDF and the database files.

dm2un12

So there are at least three solutions to this brief.

%d bloggers like this: