65.9K
CodeProject is changing. Read more.
Home

Create an Adobe InDesign Document with c#

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (3 votes)

Nov 5, 2010

CPOL
viewsIcon

32423

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";
}