C# openxml insert string to document, include content, fontSize ,alignment , isBold ,color,fontFamily, isItalici,isUnderline

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

 

posted @ 2025-09-05 11:02  FredGrit  阅读(8)  评论(0)    收藏  举报