IDML-Creator is the world's first PHP Framework for creating IDML files.

The IDML-Creator makes it possible to create IDML files for Adobe InDesign with PHP. It can be easily integrated into websites, content management systems and e-commerce systems. IDML-Creator enables the creation of fully individualized layouts, automated and in thousands every single day.

Which InDesign functions IDML-Creator provides?

IDML-Creator provides nearly all possibilities of InDesign and is on the way to provide all of them soon. A few of them are:

Spreads and Pages

Creating Spreads and Master Spreads. Adding single or double pages. Creading pages in different sizes.

Colors and Color Profiles

Adding colors from CMYK, PANTONE, HKS, RGB, HEX, RAL and LAB. Adding ICC color profiles.

Style Formats

Adding paragraph styles, character styles, object styles, table styles and cell styles. Passive and native inheritance.

Page objects

Adding text frames, rectangles, polygons, ovals and lines.


Adding fonts from anywhere. Supports also variable fonts.


Creating a beautiful typography by working with kerning, different spaces, different break characters, and a lot more.

Text variables and pagination

Using text variables to automatically create pagination, indexes, references and running titles.


Adding images. Supports TIF, JPEG, PNG, SVG, EPS, PDF and more.


Working with different languages. Using individual word wrap rules.

How does it look like?

IDML-Creator makes it simple to create an IDML in PHP. Have a look! The PHP code creates this document:

singlePage.idml (5 KB)


use Color\Value\CMYK;
use IDML\Content;
use IDML\Content\BackingStory;
use IDML\Content\Color\Color;
use IDML\Content\Container;
use IDML\Content\DesignMap;
use IDML\Content\Enum\Color\Model as ModelEnum;
use IDML\Content\Enum\Content\Language as LanguageEnum;
use IDML\Content\Enum\Unit;
use IDML\Content\Font\FontFamily;
use IDML\Content\Font\FontStyle;
use IDML\Content\Language\Language;
use IDML\Content\Page;
use IDML\Content\Preference;
use IDML\Content\Spread\Spread;
use IDML\Content\Story\CharacterStyleRange;
use IDML\Content\Story\ParagraphStyleRange;
use IDML\Content\Story\Story;
use IDML\Content\Story\Text;
use IDML\Content\Style\CharacterStyle;
use IDML\Content\Style\ParagraphStyle;
use IDML\Content\Tag;
use IDML\Content\TextFrame\TextFrame;
use IDML\Writer\File\Tree;
use IDML\Writer\Writer;

/** Requires composers autoload */
require_once 'vendor/autoload.php';

/** This is the language we want to use */
$language = new Language(

/** Creates the DesignMap */
$designMap = new DesignMap();

/** Defines some basics */
$preference = new Preference();
    ->setDocumentFormat(210, 297, Unit::MILLIMETERS())
    ->setDocumentBleed(3, Unit::MILLIMETERS())

/** Sets up a new document */
$content = new Content();
    ->setBackingStory(new BackingStory())
    ->setContainer(new Container())
    ->setTag(new Tag())

/** Creates a black Color */
$black = new Color('Black');
        new CMYK(0, 0, 0, 100)

/** Creates a red Color */
$red = new Color('Red');
        new CMYK(0, 100, 100, 0)

/** Creates some Font Styles */
$myriadPro = new FontFamily('Myriad Pro');
$myriadProRegular = new FontStyle($myriadPro, 'Regular');
$myriadProBold = new FontStyle($myriadPro, 'Bold');

/** Creates a Character Style */
$boldRed = new CharacterStyle('Bold + Red');

/** Creates a Paragraph Style */
$myParagraphStyle = new ParagraphStyle('Body');

/** Creates a Story */
$myStory = new Story();
    new ParagraphStyleRange(
        new CharacterStyleRange(
            new Text('Hello World! We\'re happy to have you here! This document was created by ')
        new CharacterStyleRange(
            new Text('IDML-Creator')
        new CharacterStyleRange(
            new Text('. Get more information about it under ')

/** Creates a TextFrame and adds the Story */
$textFrame = new TextFrame();
    ->setPosition(20, 20, Unit::MILLIMETERS())
    ->setSize(170, 257, Unit::MILLIMETERS())
    ->setColumns(1, 10, Unit::MILLIMETERS())

/** Creates a Page */
$page = new Page();
    ->setFormat(210, 297, Unit::MILLIMETERS())
    ->setMargin(20, 20, 20, 20, Unit::MILLIMETERS())
    ->setColumns(1, 10, Unit::MILLIMETERS())

/** Creates a Spread and adds the Page */
$spread = new Spread();

/** Registers all contents */
    ->addColor($black, $red)
    ->addFont($myriadProRegular, $myriadProBold)

/** Sets up the writer object and creates an IDML file */
$writer = new Writer(
    new Tree()
$writer->create(__DIR__ . DIRECTORY_SEPARATOR . 'singlePage.idml');

Who else uses IDML-Creator?

Fully individualized layout documents combined with AI and the whole power of the World Wide Web.

Creates calendar templates to make it easy for designers to work with calendars. They no longer need to worry about the calendar information!

Software development, Web2Print, Print2Web, connecting dots between digital und printing media.

And many more all around the world!