Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Create an Adobe InDesign Document with c#

0.00/5 (No votes)
7 Nov 2010 1  
Sample code to get you started
I tested some libraries that create InDesign Interchange XML-documents, but was not happy with the results.

So if you want to create an InDesign document with C#, you need to
- install Adobe InDesign
- reference "Adobe InDesign CSx Type Library" in your application

Because I didn't find a good documentation, here's some code to get you started as well.

// Create application instance
Type type = Type.GetTypeFromProgID("InDesign.Application");
Application application = (Application)Activator.CreateInstance(type);

// Set unit type
application.ViewPreferences.HorizontalMeasurementUnits = idMeasurementUnits.idMillimeters;
application.ViewPreferences.VerticalMeasurementUnits = idMeasurementUnits.idMillimeters;

// Create new document
application.Documents.Add(true, application.DocumentPresets.FirstItem());

// Get active document and change some settings
Document document = application.ActiveDocument;
document.DocumentPreferences.FacingPages = false;
document.DocumentPreferences.PageWidth = 210;
document.DocumentPreferences.PageHeight = 297;

// Get first page (already created) and set margins
Page page = (Page)document.Pages[1];
page.MarginPreferences.Top = 10;
page.MarginPreferences.Bottom = 10;
page.MarginPreferences.Left = 20;
page.MarginPreferences.Right = 10;

// Create rectangle and fit an image into it
Rectangle rectangle = page.Rectangles.Add(document.Layers.FirstItem(), idLocationOptions.idUnknown, page);
rectangle.GeometricBounds = new[] { 20, 30, 120, 130 };
rectangle.Place(@"c:\temp\sample.png", false);
rectangle.Fit(idFitOptions.idContentToFrame);

// Create second page and set margins
page = document.Pages.Add(idLocationOptions.idUnknown, document);
page.MarginPreferences.Top = 10;
page.MarginPreferences.Bottom = 10;
page.MarginPreferences.Left = 20;
page.MarginPreferences.Right = 10;

// Create a text frame and add some text
TextFrame textFrame = page.TextFrames.Add(document.Layers.FirstItem(), idLocationOptions.idUnknown, page);
textFrame.GeometricBounds = new[] { 20, 30, 120, 130 };
textFrame.Contents = "line1\rline2\rline3";
IEnumerator paragraphs = textFrame.Paragraphs.GetEnumerator();
for (int j = 0; j < textFrame.Paragraphs.Count; j++)
{
	paragraphs.MoveNext();
	Paragraph paragraph = ((Paragraph)paragraphs.Current);
	paragraph.Justification = idJustification.idCenterAlign;
	paragraph.PointSize = 15 - j;
	paragraph.FontStyle = "Regular";
	paragraph.AppliedFont = "Verdana";
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here