As you know by now, I’ve been having a fun time playing around with our Adobe Document Generation API service (be sure to see my intro and follow up on complex conditional logic). It provides an easy to use API for generating PDFs and Microsoft Word docs based on a template and your data. Today I’m going to give you a deep dive into another topic — formatting.

When I talk about formatting, I’m talking about ways to display information nicer in your documents. Imagine for a moment the following text in your Microsoft Word document:

Sales for cat toys…

Welcome to a deep dive of conditional logic in our Document Generation API. If you have not yet checked out this new tool, be sure to read my introduction to get a handle on the basics. Remember that you can test this service (and our Adobe PDF Tools API) for free for six months and do not need to provide a credit card to sign up.

Hopefully you’ve read the introduction and signed up, because now I’m going to take you into a deep dive on conditionals. I know, I know, you may be thinking, “Ray, that sounds too exciting…

This week Adobe is proud to announce the availability of the Document Generation API as part of Adobe Document Services. This is a powerful new service that enables developers to generate both Word and PDF documents from template and dynamic data. This new API is fully supported by our Java, .Net and Node SDKs already and can be used in any other language via a REST API. Let’s take a look at how this works.

Document generation is done by combining a Word document that acts as a template along with your data. This data could be hard-coded in a…

I’m still learning Vue and one of the things I was a bit slow to discover were filters. (To be fair, they are towards the end of the docs!) Filters, as you can probably guess, allow you to define simple textual transformations to values. So for example, the docs demonstrate a Capitalization filter that will convert the first letter in a string to uppercase. Vue doesn’t ship with any filters baked in, but it’s incredibly easy to write them. A great use case for this is in internationalization and globalization, broadly defined as formatting values in the user’s preferred language.

Hey folks, before I begin, let me preface the entry with a warning that this is an example of something I wanted to play with and should not be copied wholesale for your applications without a thorough security review. I got — well — attacked pretty harshly in comments a few months ago for making a few mistakes in terms of security so I want to ensure folks know that I’m putting this out as something to share, but you should use with caution. As always, if you have some constructive feedback in regards to how good/bad/etc this demo is…

Today I was thinking about what it would take to add referrer-style protection to an OpenWhisk API. What I mean by that is the ability to say that a particular API can only be called from certain domains. To be clear, this is not secure in any “real” fashion. This Stack Overflow question does a great job of addressing why not: “Does referrer header checking offer any real world security improvement?” However, I do think it can help prevent some misuse, and perhaps even help prevent accidental versus malicious misuse. As long as you keep in mind that this is…

It’s been a few weeks since I blogged about IBM Composer, sorry about that, flying to China and getting a kid will put a kink into your blogging schedule. ;) Today I want to share a simple demo of how to wrap serverless functions with try/catch and try/catch/finally logic. Let’s start off with a simple function.

function main(args) {

if(!args.input) args.input = 0;

if(args.input === 0) {
throw new Error("Can't divide by zero and maintain the Universe.");

return { result: 10/args.input };


This function simply takes an input value and then returns the result of dividing it into…

Forgive the incredibly long title, but I wasn’t quite happy with the shorter versions. As I’ve mentioned before, IBM Composer supports multiple different “compositions”, or “logic doohickies” (I work for IBM Marketing, honest), as a way to add conditional logic and branching to a serverless application. In this post, I’m going to share an example of the “Retain” composition.

Before I start though, I want to give a shout out to Olivier Tardieu. He basically wrote the composition for me and helped me wrap my head around the topic. Thanks Olivier!

Ok, so what does Retain do? …

When IBM Composer was released, my plan was to try to slowly introduce readers to it with various different tutorials. But I’ve been thinking a lot lately about a particular problem that Composer can fix for me, so I’m skipping ahead to a more complex topic for the post today. I guess this is a long winded way of saying — if you are still learning Composer this post may be a bit complex, but I’m definitely going to do more simpler posts later.

The Superman Problem

Alright — so a few months ago I built one of my most complex applications on…

A few days ago I blogged about the new Composer functionality for IBM Cloud Functions built upon Apache OpenWhisk. This is a incredibly cool release and I’m going to try my best to demonstrate it over the next few weeks. In today’s post I’m going to focus on what the process is like. By that I mean, how do I go from idea to actually using it and testing it. This won’t be terribly different from the docs, but I figure it may still be helpful for folks to get an idea of how I’m using it. (And of course…

Raymond Camden

Raymond Camden is a Senior Developer Evangelist for Adobe. He works on the Document Services tools, JavaScript, and the Jamstack.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store