Install-Package DocumentFormat.OpenXml;
static void CreateOrOrOpenWordFileInsertString(string wordFile, string str, int fontSize = 20,
string alignment = "left", bool isBold = false, string color = "000000")
{
if (!File.Exists(wordFile))
{
using (WordprocessingDocument doc = WordprocessingDocument.Create(wordFile, WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = doc.AddMainDocumentPart();
mainPart.Document = new Document(new Body());
WriteStringToDoc(mainPart, str, fontSize, alignment, isBold, color);
SetWordPageMaximize(mainPart);
SetWordPageSize(mainPart);
}
}
else
{
using (WordprocessingDocument doc = WordprocessingDocument.Open(wordFile, true))
{
MainDocumentPart mainPart = doc.MainDocumentPart;
if (mainPart?.Document?.Body==null)
{
mainPart.Document=new Document(new Body());
}
WriteStringToDoc(mainPart, str, fontSize, alignment, isBold, color);
SetWordPageMaximize(mainPart);
SetWordPageSize(mainPart);
}
}
}
private static void SetWordPageSize(MainDocumentPart mainPart)
{
SectionProperties sectionProps = new SectionProperties(
new PageSize()
{
Width = A0Width, // A0 width in twips
Height = A0Height, // A0 height in twips
Orient = PageOrientationValues.Landscape
},
new PageMargin()
{
Top = 1440, // 1 inch
Bottom = 1440,
Left = 1440,
Right = 1440
}
);
Body body = mainPart.Document.Body;
body.Append(sectionProps);
mainPart.Document.Save();
}
private static void SetWordPageMaximize(MainDocumentPart mainPart)
{
var settingsPart = mainPart.DocumentSettingsPart ?? mainPart.AddNewPart<DocumentSettingsPart>();
if (settingsPart.Settings == null)
settingsPart.Settings = new Settings();
// Remove old zoom/view if exist
settingsPart.Settings.RemoveAllChildren<Zoom>();
settingsPart.Settings.RemoveAllChildren<View>();
// Add new
settingsPart.Settings.Append(new View() { Val = ViewValues.Print });
settingsPart.Settings.Append(new Zoom() { Percent = "100" });
settingsPart.Settings.Save();
}
static void WriteStringToDoc(MainDocumentPart mainPart, string str, int fontSize = 20,
string alignment = "left", bool isBold = false, string color = "000000",
string fontFamily = "Arial", bool isItalic = false, bool isUnderline = false)
{
Body body = mainPart.Document.Body;
Run run = new Run();
RunProperties runProperties = new RunProperties();
// Set font properties
SetRunProperties(runProperties, fontSize, isBold, isItalic, isUnderline, fontFamily, color);
// Add properties to run
if (runProperties.HasChildren)
{
run.RunProperties = runProperties;
}
// Add text to run
run.Append(new Text(str));
run.Append(new Break());
Paragraph para = new Paragraph(run);
SetParagraphAlignment(para, alignment);
// Add run to paragraph
body.Append(para);
mainPart.Document.Save();
}
private static void SetRunProperties(RunProperties runProperties, int fontSize,
bool isBold, bool isItalic, bool isUnderline, string fontFamily, string color)
{
runProperties.Append(new FontSize()
{
Val = (fontSize * 2).ToString()
});
if (isBold)
{
runProperties.Append(new Bold());
}
if (isItalic)
{
runProperties.Append(new Italic());
}
if (isUnderline)
{
runProperties.Append(new Underline()
{
Val = UnderlineValues.Single
});
}
runProperties.Append(new RunFonts()
{
Ascii = fontFamily,
HighAnsi = fontFamily
});
runProperties.Append(new DocumentFormat.OpenXml.Wordprocessing.Color()
{
Val = color
});
}
private static void SetParagraphAlignment(Paragraph paragraph, string alignment)
{
ParagraphProperties paragraphProps = new ParagraphProperties();
switch (alignment.ToLower())
{
case "center":
paragraphProps.Append(new Justification()
{
Val = JustificationValues.Center
});
break;
case "right":
paragraphProps.Append(new Justification()
{
Val = JustificationValues.Right
});
break;
case "both":
paragraphProps.Append(new Justification()
{
Val = JustificationValues.Both
});
break;
default:
paragraphProps.Append(new Justification()
{
Val = JustificationValues.Left
});
break;
}
paragraph.ParagraphProperties = paragraphProps;
}
private static string ColorToHexString(System.Drawing.Color color)
{
// Convert to 6-digit hex string (without alpha)
return $"{color.R:X2}{color.G:X2}{color.B:X2}";
}
![image]()
![image]()
![image]()
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.Diagnostics;
namespace ConsoleApp29
{
internal class Program
{
static Random rnd;
private const UInt32 WordMaxPage = 31680;
// Clamp A0 dimensions to Word's maximum supported
private const UInt32 A0Width = WordMaxPage;
private const UInt32 A0Height = WordMaxPage;
// Margins in twips (1 inch = 1440 twips)
private const int Margin = 1440;
// EMU conversion (1 inch = 914400 EMU)
private const long EmusPerInch = 914400;
static void Main(string[] args)
{
rnd=new Random();
string wordFile = $"DOC_{DateTime.Now.ToString("yyyyMMddHHmmssffff")}.docx";
CreateOrOrOpenWordFileInsertString(wordFile, "SMOOTHTECH", 50, "center", true);
CreateOrOrOpenWordFileInsertString(wordFile, "Focus", 50, "left", true);
CreateOrOrOpenWordFileInsertString(wordFile, "Laser Focus", 50, "left", true);
CreateOrOrOpenWordFileInsertString(wordFile, "Laser Beam Focus", 50, "left", true);
for (int i = 1; i<101; i++)
{
System.Drawing.Color color = System.Drawing.Color.FromArgb(255, rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255));
string hexColorStr = ColorToHexString(color);
CreateOrOrOpenWordFileInsertString(wordFile, $"{i}_{Guid.NewGuid().ToString("N")}"
, rnd.Next(20, 50), "left", rnd.Next(0, 10)/2==0, hexColorStr);
}
var proc = new Process()
{
StartInfo=new ProcessStartInfo()
{
FileName = wordFile,
UseShellExecute = true
}
};
proc.Start();
}
static void CreateOrOrOpenWordFileInsertString(string wordFile, string str, int fontSize = 20,
string alignment = "left", bool isBold = false, string color = "000000")
{
if (!File.Exists(wordFile))
{
using (WordprocessingDocument doc = WordprocessingDocument.Create(wordFile, WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = doc.AddMainDocumentPart();
mainPart.Document = new Document(new Body());
WriteStringToDoc(mainPart, str, fontSize, alignment, isBold, color);
SetWordPageMaximize(mainPart);
SetWordPageSize(mainPart);
}
}
else
{
using (WordprocessingDocument doc = WordprocessingDocument.Open(wordFile, true))
{
MainDocumentPart mainPart = doc.MainDocumentPart;
if (mainPart?.Document?.Body==null)
{
mainPart.Document=new Document(new Body());
}
WriteStringToDoc(mainPart, str, fontSize, alignment, isBold, color);
SetWordPageMaximize(mainPart);
SetWordPageSize(mainPart);
}
}
}
private static void SetWordPageSize(MainDocumentPart mainPart)
{
SectionProperties sectionProps = new SectionProperties(
new PageSize()
{
Width = A0Width, // A0 width in twips
Height = A0Height, // A0 height in twips
Orient = PageOrientationValues.Landscape
},
new PageMargin()
{
Top = 1440, // 1 inch
Bottom = 1440,
Left = 1440,
Right = 1440
}
);
Body body = mainPart.Document.Body;
body.Append(sectionProps);
mainPart.Document.Save();
}
private static void SetWordPageMaximize(MainDocumentPart mainPart)
{
var settingsPart = mainPart.DocumentSettingsPart ?? mainPart.AddNewPart<DocumentSettingsPart>();
if (settingsPart.Settings == null)
settingsPart.Settings = new Settings();
// Remove old zoom/view if exist
settingsPart.Settings.RemoveAllChildren<Zoom>();
settingsPart.Settings.RemoveAllChildren<View>();
// Add new
settingsPart.Settings.Append(new View() { Val = ViewValues.Print });
settingsPart.Settings.Append(new Zoom() { Percent = "100" });
settingsPart.Settings.Save();
}
static void WriteStringToDoc(MainDocumentPart mainPart, string str, int fontSize = 20,
string alignment = "left", bool isBold = false, string color = "000000",
string fontFamily = "Arial", bool isItalic = false, bool isUnderline = false)
{
Body body = mainPart.Document.Body;
Run run = new Run();
RunProperties runProperties = new RunProperties();
// Set font properties
SetRunProperties(runProperties, fontSize, isBold, isItalic, isUnderline, fontFamily, color);
// Add properties to run
if (runProperties.HasChildren)
{
run.RunProperties = runProperties;
}
// Add text to run
run.Append(new Text(str));
run.Append(new Break());
Paragraph para = new Paragraph(run);
SetParagraphAlignment(para, alignment);
// Add run to paragraph
body.Append(para);
mainPart.Document.Save();
}
private static void SetRunProperties(RunProperties runProperties, int fontSize,
bool isBold, bool isItalic, bool isUnderline, string fontFamily, string color)
{
runProperties.Append(new FontSize()
{
Val = (fontSize * 2).ToString()
});
if (isBold)
{
runProperties.Append(new Bold());
}
if (isItalic)
{
runProperties.Append(new Italic());
}
if (isUnderline)
{
runProperties.Append(new Underline()
{
Val = UnderlineValues.Single
});
}
runProperties.Append(new RunFonts()
{
Ascii = fontFamily,
HighAnsi = fontFamily
});
runProperties.Append(new DocumentFormat.OpenXml.Wordprocessing.Color()
{
Val = color
});
}
private static void SetParagraphAlignment(Paragraph paragraph, string alignment)
{
ParagraphProperties paragraphProps = new ParagraphProperties();
switch (alignment.ToLower())
{
case "center":
paragraphProps.Append(new Justification()
{
Val = JustificationValues.Center
});
break;
case "right":
paragraphProps.Append(new Justification()
{
Val = JustificationValues.Right
});
break;
case "both":
paragraphProps.Append(new Justification()
{
Val = JustificationValues.Both
});
break;
default:
paragraphProps.Append(new Justification()
{
Val = JustificationValues.Left
});
break;
}
paragraph.ParagraphProperties = paragraphProps;
}
private static string ColorToHexString(System.Drawing.Color color)
{
// Convert to 6-digit hex string (without alpha)
return $"{color.R:X2}{color.G:X2}{color.B:X2}";
}
}
}