Давайте создадим простой документ DOCX с двумя абзацами, содержащими форматированный текст и графику, как показано на рисунке:
Здесь мы покажем Вам два способа создания одного и того же документа DOCX с нуля. Используйте любой из них, который Вам более понятен:
Используя DocumentBuilder.
Используя DOM (Объектная Модель Документа) напрямую.
DocumentBuilder — это мощный класс, связанный с DocumentCore и позволяющий динамически создавать документы с нуля или добавлять новые элементы в существующий документ.
Все, что возможно с DocumentBuilder, возможно и при непосредственном использовании классов DOM (Объектная Модель Документа), но обычно требует больше строк кода, чем при использовании DocumentBuilder.
public static void CreateDocxUsingDocumentBuilder()
{
// Set a path to our document.
string docPath = @"Result-DocumentBuilder.docx";
// Create a new document and DocumentBuilder.
DocumentCore dc = new DocumentCore();
DocumentBuilder db = new DocumentBuilder(dc);
// Set page size A4.
Section section = db.Document.Sections[0];
section.PageSetup.PaperType = PaperType.A4;
// Add 1st paragraph with formatted text.
db.CharacterFormat.FontName = "Verdana";
db.CharacterFormat.Size = 16;
db.CharacterFormat.FontColor = Color.Orange;
db.Write("This is a first line in 1st paragraph!");
// Add a line break into the 1st paragraph.
db.InsertSpecialCharacter(SpecialCharacterType.LineBreak);
// Add 2nd line to the 1st paragraph, create 2nd paragraph.
db.Writeln("Let's type a second line.");
// Specify the paragraph alignment.
(section.Blocks[0] as Paragraph).ParagraphFormat.Alignment = HorizontalAlignment.Center;
// Add text into the 2nd paragraph.
db.CharacterFormat.ClearFormatting();
db.CharacterFormat.Size = 25;
db.CharacterFormat.FontColor = Color.Blue;
db.CharacterFormat.Bold = true;
db.Write("This is a first line in 2nd paragraph.");
// Insert a line break into the 2nd paragraph.
db.InsertSpecialCharacter(SpecialCharacterType.LineBreak);
// Insert 2nd line with own formatting to the 2nd paragraph.
db.CharacterFormat.Size = 20;
db.CharacterFormat.FontColor = Color.DarkGreen;
db.CharacterFormat.UnderlineStyle = UnderlineType.Single;
db.CharacterFormat.Bold = false;
db.Write("This is a second line.");
// Add a graphics figure into the paragraph.
db.CharacterFormat.ClearFormatting();
Shape shape = db.InsertShape(SautinSoft.Document.Drawing.Figure.SmileyFace, new SautinSoft.Document.Drawing.Size(50, 50, LengthUnit.Millimeter));
// Specify outline and fill.
shape.Outline.Fill.SetSolid(new SautinSoft.Document.Color("#358CCB"));
shape.Outline.Width = 3;
shape.Fill.SetSolid(SautinSoft.Document.Color.Orange);
// Save the document to the file in DOCX format.
dc.Save(docPath, new DocxSaveOptions()
{ EmbeddedJpegQuality = 90 });
// Open the result for demonstration purposes.
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(docPath) { UseShellExecute = true });
}
DOM (объектная модель документа) очень проста и понятна, это представление документа Word в памяти.
public static void CreateDocxUsingDOM()
{
// Set a path to our document.
string docPath = @"Result-DocumentCore.docx";
// Create a new document.
DocumentCore dc = new DocumentCore();
// Add new section.
Section section = new Section(dc);
dc.Sections.Add(section);
// Let's set page size A4.
section.PageSetup.PaperType = PaperType.A4;
// Add two paragraphs
Paragraph par1 = new Paragraph(dc);
par1.ParagraphFormat.Alignment = HorizontalAlignment.Center;
section.Blocks.Add(par1);
// Let's create a characterformat for text in the 1st paragraph.
CharacterFormat cf = new CharacterFormat() { FontName = "Verdana", Size = 16, FontColor = Color.Orange };
Run run1 = new Run(dc, "This is a first line in 1st paragraph!");
run1.CharacterFormat = cf;
par1.Inlines.Add(run1);
// Let's add a line break into the 1st paragraph.
par1.Inlines.Add(new SpecialCharacter(dc, SpecialCharacterType.LineBreak));
// Copy the formatting.
Run run2 = run1.Clone();
run2.Text = "Let's type a second line.";
par1.Inlines.Add(run2);
// Add 2nd paragraph.
Paragraph par2 = new Paragraph(dc, new Run(dc, "This is a first line in 2nd paragraph.", new CharacterFormat() { Size = 25, FontColor = Color.Blue, Bold = true }));
section.Blocks.Add(par2);
SpecialCharacter lBr = new SpecialCharacter(dc, SpecialCharacterType.LineBreak);
par2.Inlines.Add(lBr);
Run run3 = new Run(dc, "This is a second line.", new CharacterFormat() { Size = 20, FontColor = Color.DarkGreen, UnderlineStyle = UnderlineType.Single });
par2.Inlines.Add(run3);
// Add a graphics figure into the paragraph.
Shape shape = new Shape(dc, new InlineLayout(new SautinSoft.Document.Drawing.Size(50, 50, LengthUnit.Millimeter)));
// Specify outline and fill.
shape.Outline.Fill.SetSolid(new SautinSoft.Document.Color("#358CCB"));
shape.Outline.Width = 3;
shape.Fill.SetSolid(SautinSoft.Document.Color.Orange);
shape.Geometry.SetPreset(Figure.SmileyFace);
par2.Inlines.Add(shape);
// Save the document to the file in DOCX format.
dc.Save(docPath, new DocxSaveOptions()
{ EmbeddedJpegQuality = 90 });
// Open the result for demonstration purposes.
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(docPath) { UseShellExecute = true });
}
Как видите, в методе Save() мы указали в качестве параметра класс DocxSaveOptions. Также можно сохранить в DOCX с помощью MemoryStream и установить другие параметры.
Полный код
using SautinSoft.Document;
using SautinSoft.Document.Drawing;
namespace Example
{
class Program
{
static void Main(string[] args)
{
// Get your free 100-day key here:
// https://sautinsoft.com/start-for-free/
// Here we'll show two ways to create DOCX document from a scratch.
// Use any of them, which is more clear to you.
// 1. With help of DocumentBuilder (wizard).
CreateDocxUsingDocumentBuilder();
// 2. With Document Object Model (DOM) directly.
CreateDocxUsingDOM();
}
/// <summary>
/// Creates a new DOCX document using DocumentBuilder wizard.
/// </summary>
/// <remarks>
/// Details: https://sautinsoft.com/products/document/help/net/developer-guide/create-docx-document-net-csharp-vb.php
/// </remarks>
public static void CreateDocxUsingDocumentBuilder()
{
// Set a path to our document.
string docPath = @"Result-DocumentBuilder.docx";
// Create a new document and DocumentBuilder.
DocumentCore dc = new DocumentCore();
DocumentBuilder db = new DocumentBuilder(dc);
// Set page size A4.
Section section = db.Document.Sections[0];
section.PageSetup.PaperType = PaperType.A4;
// Add 1st paragraph with formatted text.
db.CharacterFormat.FontName = "Verdana";
db.CharacterFormat.Size = 16;
db.CharacterFormat.FontColor = Color.Orange;
db.Write("This is a first line in 1st paragraph!");
// Add a line break into the 1st paragraph.
db.InsertSpecialCharacter(SpecialCharacterType.LineBreak);
// Add 2nd line to the 1st paragraph, create 2nd paragraph.
db.Writeln("Let's type a second line.");
// Specify the paragraph alignment.
(section.Blocks[0] as Paragraph).ParagraphFormat.Alignment = HorizontalAlignment.Center;
// Add text into the 2nd paragraph.
db.CharacterFormat.ClearFormatting();
db.CharacterFormat.Size = 25;
db.CharacterFormat.FontColor = Color.Blue;
db.CharacterFormat.Bold = true;
db.Write("This is a first line in 2nd paragraph.");
// Insert a line break into the 2nd paragraph.
db.InsertSpecialCharacter(SpecialCharacterType.LineBreak);
// Insert 2nd line with own formatting to the 2nd paragraph.
db.CharacterFormat.Size = 20;
db.CharacterFormat.FontColor = Color.DarkGreen;
db.CharacterFormat.UnderlineStyle = UnderlineType.Single;
db.CharacterFormat.Bold = false;
db.Write("This is a second line.");
// Add a graphics figure into the paragraph.
db.CharacterFormat.ClearFormatting();
Shape shape = db.InsertShape(SautinSoft.Document.Drawing.Figure.SmileyFace, new SautinSoft.Document.Drawing.Size(50, 50, LengthUnit.Millimeter));
// Specify outline and fill.
shape.Outline.Fill.SetSolid(new SautinSoft.Document.Color("#358CCB"));
shape.Outline.Width = 3;
shape.Fill.SetSolid(SautinSoft.Document.Color.Orange);
// Save the document to the file in DOCX format.
dc.Save(docPath, new DocxSaveOptions()
{ EmbeddedJpegQuality = 90 });
// Important for Linux: Install MS Fonts
// sudo apt install ttf-mscorefonts-installer -y
// Open the result for demonstration purposes.
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(docPath) { UseShellExecute = true });
}
/// <summary>
/// Creates a new DOCX document using DOM directly.
/// </summary>
/// <remarks>
/// Details: https://sautinsoft.com/products/document/help/net/developer-guide/create-docx-document-net-csharp-vb.php
/// </remarks>
public static void CreateDocxUsingDOM()
{
// Set a path to our document.
string docPath = @"Result-DocumentCore.docx";
// Create a new document.
DocumentCore dc = new DocumentCore();
// Add new section.
Section section = new Section(dc);
dc.Sections.Add(section);
// Let's set page size A4.
section.PageSetup.PaperType = PaperType.A4;
// Add two paragraphs
Paragraph par1 = new Paragraph(dc);
par1.ParagraphFormat.Alignment = HorizontalAlignment.Center;
section.Blocks.Add(par1);
// Let's create a characterformat for text in the 1st paragraph.
CharacterFormat cf = new CharacterFormat() { FontName = "Verdana", Size = 16, FontColor = Color.Orange };
Run run1 = new Run(dc, "This is a first line in 1st paragraph!");
run1.CharacterFormat = cf;
par1.Inlines.Add(run1);
// Let's add a line break into the 1st paragraph.
par1.Inlines.Add(new SpecialCharacter(dc, SpecialCharacterType.LineBreak));
// Copy the formatting.
Run run2 = run1.Clone();
run2.Text = "Let's type a second line.";
par1.Inlines.Add(run2);
// Add 2nd paragraph.
Paragraph par2 = new Paragraph(dc, new Run(dc, "This is a first line in 2nd paragraph.", new CharacterFormat() { Size = 25, FontColor = Color.Blue, Bold = true }));
section.Blocks.Add(par2);
SpecialCharacter lBr = new SpecialCharacter(dc, SpecialCharacterType.LineBreak);
par2.Inlines.Add(lBr);
Run run3 = new Run(dc, "This is a second line.", new CharacterFormat() { Size = 20, FontColor = Color.DarkGreen, UnderlineStyle = UnderlineType.Single });
par2.Inlines.Add(run3);
// Add a graphics figure into the paragraph.
Shape shape = new Shape(dc, new InlineLayout(new SautinSoft.Document.Drawing.Size(50, 50, LengthUnit.Millimeter)));
// Specify outline and fill.
shape.Outline.Fill.SetSolid(new SautinSoft.Document.Color("#358CCB"));
shape.Outline.Width = 3;
shape.Fill.SetSolid(SautinSoft.Document.Color.Orange);
shape.Geometry.SetPreset(Figure.SmileyFace);
par2.Inlines.Add(shape);
// Save the document to the file in DOCX format.
dc.Save(docPath, new DocxSaveOptions()
{ EmbeddedJpegQuality = 90 });
// Important for Linux: Install MS Fonts
// sudo apt install ttf-mscorefonts-installer -y
// Open the result for demonstration purposes.
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(docPath) { UseShellExecute = true });
}
}
}
Imports SautinSoft.Document
Imports SautinSoft.Document.Drawing
Namespace Example
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Here we'll show two ways to create DOCX document from a scratch.
' Use any of them, which is more clear to you.
' 1. With help of DocumentBuilder (wizard).
CreateDocxUsingDocumentBuilder()
' 2. With Document Object Model (DOM) directly.
CreateDocxUsingDOM()
End Sub
''' Get your free 100-day key here:
''' https://sautinsoft.com/start-for-free/
''' <summary>
''' Creates a new DOCX document using DocumentBuilder wizard.
''' </summary>
''' <remarks>
''' Details: https://sautinsoft.com/products/document/help/net/developer-guide/create-docx-document-net-csharp-vb.php
''' </remarks>
Public Shared Sub CreateDocxUsingDocumentBuilder()
' Set a path to our document.
Dim docPath As String = "Result-DocumentBuilder.docx"
' Create a new document and DocumentBuilder.
Dim dc As New DocumentCore()
Dim db As New DocumentBuilder(dc)
' Set page size A4.
Dim section As Section = db.Document.Sections(0)
section.PageSetup.PaperType = PaperType.A4
' Add 1st paragraph with formatted text.
db.CharacterFormat.FontName = "Verdana"
db.CharacterFormat.Size = 16
db.CharacterFormat.FontColor = Color.Orange
db.Write("This is a first line in 1st paragraph!")
' Add a line break into the 1st paragraph.
db.InsertSpecialCharacter(SpecialCharacterType.LineBreak)
' Add 2nd line to the 1st paragraph, create 2nd paragraph.
db.Writeln("Let's type a second line.")
' Specify the paragraph alignment.
TryCast(section.Blocks(0), Paragraph).ParagraphFormat.Alignment = HorizontalAlignment.Center
' Add text into the 2nd paragraph.
db.CharacterFormat.ClearFormatting()
db.CharacterFormat.Size = 25
db.CharacterFormat.FontColor = Color.Blue
db.CharacterFormat.Bold = True
db.Write("This is a first line in 2nd paragraph.")
' Insert a line break into the 2nd paragraph.
db.InsertSpecialCharacter(SpecialCharacterType.LineBreak)
' Insert 2nd line with own formatting to the 2nd paragraph.
db.CharacterFormat.Size = 20
db.CharacterFormat.FontColor = Color.DarkGreen
db.CharacterFormat.UnderlineStyle = UnderlineType.Single
db.CharacterFormat.Bold = False
db.Write("This is a second line.")
' Add a graphics figure into the paragraph.
db.CharacterFormat.ClearFormatting()
Dim shape As Shape = db.InsertShape(SautinSoft.Document.Drawing.Figure.SmileyFace, New SautinSoft.Document.Drawing.Size(50, 50, LengthUnit.Millimeter))
' Specify outline and fill.
shape.Outline.Fill.SetSolid(New SautinSoft.Document.Color("#358CCB"))
shape.Outline.Width = 3
shape.Fill.SetSolid(SautinSoft.Document.Color.Orange)
' Save the document to the file in DOCX format.
dc.Save(docPath, New DocxSaveOptions() With {.EmbeddedJpegQuality = 90})
' Open the result for demonstration purposes.
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(docPath) With {.UseShellExecute = True})
End Sub
''' <summary>
''' Creates a new DOCX document using DOM directly.
''' </summary>
''' <remarks>
''' Details: https://sautinsoft.com/products/document/help/net/developer-guide/create-docx-document-net-csharp-vb.php
''' </remarks>
Public Shared Sub CreateDocxUsingDOM()
' Set a path to our document.
Dim docPath As String = "Result-DocumentCore.docx"
' Create a new document.
Dim dc As New DocumentCore()
' Add new section.
Dim section As New Section(dc)
dc.Sections.Add(section)
' Let's set page size A4.
section.PageSetup.PaperType = PaperType.A4
' Add two paragraphs
Dim par1 As New Paragraph(dc)
par1.ParagraphFormat.Alignment = HorizontalAlignment.Center
section.Blocks.Add(par1)
' Let's create a characterformat for text in the 1st paragraph.
Dim cf As New CharacterFormat() With {
.FontName = "Verdana",
.Size = 16,
.FontColor = Color.Orange
}
Dim run1 As New Run(dc, "This is a first line in 1st paragraph!")
run1.CharacterFormat = cf
par1.Inlines.Add(run1)
' Let's add a line break into the 1st paragraph.
par1.Inlines.Add(New SpecialCharacter(dc, SpecialCharacterType.LineBreak))
' Copy the formatting.
Dim run2 As Run = run1.Clone()
run2.Text = "Let's type a second line."
par1.Inlines.Add(run2)
' Add 2nd paragraph.
Dim par2 As Paragraph = New Paragraph(dc, New Run(dc, "This is a first line in 2nd paragraph.", New CharacterFormat() With {
.Size = 25,
.FontColor = Color.Blue,
.Bold = True
}))
section.Blocks.Add(par2)
Dim lBr As New SpecialCharacter(dc, SpecialCharacterType.LineBreak)
par2.Inlines.Add(lBr)
Dim run3 As Run = New Run(dc, "This is a second line.", New CharacterFormat() With {
.Size = 20,
.FontColor = Color.DarkGreen,
.UnderlineStyle = UnderlineType.Single
})
par2.Inlines.Add(run3)
' Add a graphics figure into the paragraph.
Dim shape As New Shape(dc, New InlineLayout(New SautinSoft.Document.Drawing.Size(50, 50, LengthUnit.Millimeter)))
' Specify outline and fill.
shape.Outline.Fill.SetSolid(New SautinSoft.Document.Color("#358CCB"))
shape.Outline.Width = 3
shape.Fill.SetSolid(SautinSoft.Document.Color.Orange)
shape.Geometry.SetPreset(Figure.SmileyFace)
par2.Inlines.Add(shape)
' Save the document to the file in DOCX format.
dc.Save(docPath, New DocxSaveOptions() With {.EmbeddedJpegQuality = 90})
' Open the result for demonstration purposes.
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(docPath) With {.UseShellExecute = True})
End Sub
End Class
End Namespace
Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу [email protected] или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже: