Create an Adobe InDesign Document with c#
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"; }