In Word 2013 and later version, you can reply to a comment, so it's easier to follow the whole conversation. Spire.Doc also allows programmers to insert a comment as a reply to a selected comment through ReplyToComment method.

Step 1: Create an object of Document and load a Word document containing comments.

Document doc = new Document();
doc.LoadFromFile("Comment.docx");

Step 2: Get the first comment.

Comment comment = doc.Comments[0];

Step 3: Create a new comment and specify the author and content.

Comment replyComment = new Comment(doc);
replyComment.Format.Author = "Adam";
replyComment.Body.AddParagraph().AppendText("Exactly.");

Step 4: Add the new comment as a reply to the selected comment.

comment.ReplyToComment(replyComment);

Step 5: Save to file.

doc.SaveToFile("ReplyToComment.docx", FileFormat.Docx2013);

How to Reply to a Comment in Word in C#, VB.NET

Full Code:

[C#]
Document doc = new Document();
doc.LoadFromFile("Comment.docx");
Comment comment = doc.Comments[0];

Comment replyComment = new Comment(doc);
replyComment.Format.Author = "Adam";
replyComment.Body.AddParagraph().AppendText("Exactly.");
comment.ReplyToComment(replyComment);

doc.SaveToFile("ReplyToComment.docx", FileFormat.Docx2013);
[VB.NET]
Dim doc As New Document()
doc.LoadFromFile("Comment.docx")
Dim comment As Comment = doc.Comments(0)

Dim replyComment As New Comment(doc)
replyComment.Format.Author = "Adam"
replyComment.Body.AddParagraph().AppendText("Exactly.")
comment.ReplyToComment(replyComment)

doc.SaveToFile("ReplyToComment.docx", FileFormat.Docx2013)

With the help of Spire.Doc, we can easily add new paragraphs to the existing word document. Sometimes, there are many empty lines or blank paragraphs on the wording document when we copy the contents from the internet. We can use Spire.Doc to remove the empty lines at one time easily. This article will show you how to remove the empty lines from the word documents in C#.

Firstly, view the sample document with empty lines:

How to remove empty lines from the word document in C#

Step 1: Create a new word document and load the document from file.

Document doc = new Document();
doc.LoadFromFile("Sample.docx");

Step 2: Traverse every section on the word document and remove the null and empty paragraphs.

foreach (Section section in doc.Sections)
{
    for (int i = 0; i < section.Body.ChildObjects.Count; i++)
    {
        if (section.Body.ChildObjects[i].DocumentObjectType == DocumentObjectType.Paragraph)
        {
            if (String.IsNullOrEmpty((section.Body.ChildObjects[i] as Paragraph).Text.Trim()))
            {
                section.Body.ChildObjects.Remove(section.Body.ChildObjects[i]);
                i--;
            }
        }

    }
}

Step 3: Save the document to file.

string result = "result.docx";
doc.SaveToFile(result, FileFormat.Docx2013);

Effective screenshot after removing the empty lines from the word document:

How to remove empty lines from the word document in C#

Full codes:

{
    Document doc = new Document();
    doc.LoadFromFile("Sample.docx");
    
    foreach (Section section in doc.Sections)
    {
        for (int i = 0; i < section.Body.ChildObjects.Count; i++)
        {
            if (section.Body.ChildObjects[i].DocumentObjectType == DocumentObjectType.Paragraph)
            {
                if (String.IsNullOrEmpty((section.Body.ChildObjects[i] as Paragraph).Text.Trim()))
                {
                    section.Body.ChildObjects.Remove(section.Body.ChildObjects[i]);
                    i--;
                }
            }

        }
    }
    
    string result = "result.docx";
    doc.SaveToFile(result, FileFormat.Docx2013);
  }
Thursday, 20 April 2017 08:46

Add a Line Annotation to PDF in C#

Line annotation appears as a straight line on PDF page, we can use it to insert text or give directions to readers. When moving onto the line annotation, it will display a pop up window with the comment text we added. This article introduces how to add a line annotation to PDF document programmatically using Spire.PDF and C#.

Code snippet:

Step 1: Create a PDF document and add a new page.

PdfDocument document = new PdfDocument();
PdfPageBase page = document.Pages.Add();

Step 2: Create a line annotation using the PdfLineAnnotation(int[] linePoints, string text) constructor.

int[] linePoints = new int[] { 100, 450, 180, 450 };
PdfLineAnnotation lineAnnotation = new PdfLineAnnotation(linePoints, "Comment Text");

Step 3: Set the properties of the line annotation.

//Set the line border
lineAnnotation.lineBorder.BorderStyle = PdfBorderStyle.Solid;
lineAnnotation.lineBorder.BorderWidth = 1;

//Set the line intent
lineAnnotation.LineIntent = PdfLineIntent.LineDimension;

//Set the line style
lineAnnotation.BeginLineStyle = PdfLineEndingStyle.Butt;
lineAnnotation.EndLineStyle = PdfLineEndingStyle.Diamond;

lineAnnotation.Flags = PdfAnnotationFlags.Default;

//Set the line color
lineAnnotation.InnerLineColor = new PdfRGBColor(Color.Green);
lineAnnotation.BackColor = new PdfRGBColor(Color.Green);

//Set the leader line
lineAnnotation.LeaderLineExt = 0;
lineAnnotation.LeaderLine = 0;

Step 4: Add the line annotation to the page.

page.AnnotationsWidget.Add(lineAnnotation);

Step 5: Save the document.

document.SaveToFile("LineAnnotation.pdf");

Screenshot:

Add a Line Annotation to PDF in C#

Full code:

using Spire.Pdf;
using Spire.Pdf.Annotations;
using System.Drawing;
using Spire.Pdf.Graphics;
using Spire.Pdf.Fields;

namespace Add_line_annotation_to_PDF
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a PDF document and add a new page
            PdfDocument document = new PdfDocument();
            PdfPageBase page = document.Pages.Add();

            int[] linePoints = new int[] { 100, 450, 180, 450 };
            //Create a line annotation
            PdfLineAnnotation lineAnnotation = new PdfLineAnnotation(linePoints, "Comment Text");

            //Set the line border
            lineAnnotation.lineBorder.BorderStyle = PdfBorderStyle.Solid;
            lineAnnotation.lineBorder.BorderWidth = 1;

            //Set the line intent
            lineAnnotation.LineIntent = PdfLineIntent.LineDimension;

            //Set the line style
            lineAnnotation.BeginLineStyle = PdfLineEndingStyle.Butt;
            lineAnnotation.EndLineStyle = PdfLineEndingStyle.Diamond;

            lineAnnotation.Flags = PdfAnnotationFlags.Default;

            //Set the line color
            lineAnnotation.InnerLineColor = new PdfRGBColor(Color.Green);
            lineAnnotation.BackColor = new PdfRGBColor(Color.Green);

            //Set the leader line
            lineAnnotation.LeaderLineExt = 0;
            lineAnnotation.LeaderLine = 0;

            //Add the line annotation to the page
            page.AnnotationsWidget.Add(lineAnnotation);

            //Save the document
            document.SaveToFile("LineAnnotation.pdf");
        }
    }
}

Spire.Doc supports to insert a picture to text box as a background image or as a part of body content. This article demonstrates how to achieve these purposes through following code snippets.

Part 1. Insert Background Image to Text Box

//Create a Word document
Document doc = new Document();
Section section = doc.AddSection();
Paragraph paragraph = section.AddParagraph();

//Append a Textbox to paragraph
TextBox tb = paragraph.AppendTextBox(120, 200);

//Set the position of Textbox
tb.Format.HorizontalOrigin = HorizontalOrigin.Page;
tb.Format.HorizontalPosition = 50;
tb.Format.VerticalOrigin = VerticalOrigin.Page;
tb.Format.VerticalPosition = 50;

//Set the fill effect of Textbox as picture
tb.Format.FillEfects.Type = BackgroundType.Picture;

//Fill the Textbox with a picture
tb.Format.FillEfects.Picture = Image.FromFile("Background.jpg");

//Save to file
doc.SaveToFile("InsertBackgroundImage.docx", FileFormat.Docx2013);

Output:

How to Insert Image to Text Box in Word in C#, VB.NET

Part 2. Insert Image to Body of Text Box

//Create a Word document
Document doc = new Document();
Section section = doc.AddSection();
Paragraph paragraph = section.AddParagraph();

//Append a Textbox to paragraph
TextBox tb = paragraph.AppendTextBox(140, 250);

//Set the position of Textbox
tb.Format.HorizontalOrigin = HorizontalOrigin.Page;
tb.Format.HorizontalPosition = 50;
tb.Format.VerticalOrigin = VerticalOrigin.Page;
tb.Format.VerticalPosition = 50;

//Insert an image to body of Textbox
Paragraph para1 = tb.Body.AddParagraph();
Image image = Image.FromFile("Shakespeare.jpg");
DocPicture picture = para1.AppendPicture(image);
para1.Format.AfterSpacing = 8;
para1.Format.HorizontalAlignment = HorizontalAlignment.Center;

//Insert text to body of Textbox
Paragraph para2 = tb.Body.AddParagraph();
TextRange textRange = para2.AppendText("(26 Apr.1564–§C23 Apr.1616) English poet, playwright, and actor, widely regarded as the greatest writer in the English language and the world's pre-eminent dramatist.");
textRange.CharacterFormat.FontName = "Cambria";
textRange.CharacterFormat.FontSize = 9;
para2.Format.LineSpacing = 15;
para2.Format.HorizontalAlignment = HorizontalAlignment.Left;
para2.Format.SuppressAutoHyphens = true; 

//Save to file
doc.SaveToFile("InsertToBody.docx", FileFormat.Docx2013);

Output:

How to Insert Image to Text Box in Word in C#, VB.NET

When we operate the ComboBox field and ListBox field on PDF files, we can set the options for Dropdown Properties. This article will focus on how you how to set "Commit selected value immediately" property for ComboBox field and ListBox field. We will divide into two parts for how to set the property of "Commit selected value immediately", one is for the existing field on PDF and the other is for the new field added to the PDF file.

The following code is for how to set "Commit selected value immediately" property for the existing ListBox field on PDF:

//create a PDF document and load the document from file
 PdfDocument pdf = new PdfDocument();
 pdf.LoadFromFile("FormField.pdf");

 //get the existing form
 PdfFormWidget fw = pdf.Form as PdfFormWidget;

 //get the ListBox field and set the field of CommitOnSelChange property as true
 if (fw != null)
 {
     for (int i = 0; i < fw.FieldsWidget.Count; i++)
     {
         if (fw.FieldsWidget[i] != null)
         {
             if (fw.FieldsWidget[i] is PdfListBoxWidgetFieldWidget)
             {

                 (fw.FieldsWidget[i] as PdfListBoxWidgetFieldWidget).CommitOnSelChange = true;
             }
         }
     }
 }
 pdf.SaveToFile("Result.pdf");

Set

The following code is for how to set the property of "Commit selected value immediately" for ComboBox field when we add a new ComboBox field on PDF:

using (PdfDocument pdf = new PdfDocument())
{
    PdfPageBase page = pdf.Pages.Add();
    
     //add a new ComboBox Field and add data to it
PdfComboBoxField combo = new PdfComboBoxField(page, "ComboBox");
    combo.Bounds = new RectangleF(20, 20,60, 20);
    PdfListFieldItem item1 = new PdfListFieldItem("First", "1");
    PdfListFieldItem item2 = new PdfListFieldItem("Second", "2");
    combo.Items.Add(item1);
    combo.Items.Add(item2);

//set the field of CommitOnSelChange property as true
    combo.CommitOnSelChange = true;

    pdf.Form.Fields.Add(combo);
    pdf.SaveToFile("Result2.Pdf");
}

Set

Wednesday, 12 April 2017 07:59

How to Create a Nested Table in Word in C#

A nested table is one table placed inside of another, where the larger table functions as a container for the smaller one. Nested tables allow you to arrange different sets of data in groups to show clients.

This article presents how we can create a nested table using Spire.Doc in C#.

Step 1: Create a new PDF document and add a section to it.

Document doc = new Document();
Section section = doc.AddSection();

Step 2: Add a table to the section.

Table table = section.AddTable(true);
table.ResetCells(2, 3);

Step 3: Adjust the column with.

table.Rows[0].Cells[0].Width = table.Rows[0].Cells[2].Width = 50F;
table.Rows[1].Cells[0].Width = table.Rows[1].Cells[2].Width = 50F;
table.AutoFitBehavior(AutoFitBehaviorType.wdAutoFitWindow);

Step 4: Insert content to the cells of the table.

table[0, 0].AddParagraph().AppendText("SI.No.");
string text = "Earthwork excavation for foundation of buildings, water supply, "
             + "sanitary lines and electrical conduits either in pits or in "
             + "trenches 1.5m and above in width, in ordinary soil not exceeding "
             + "1.5m in depth including dressing the bottom and sides of pits and  "
             + "trenches, stacking the excavated soil clear.";
table[0, 1].AddParagraph().AppendText(text);
table[0, 2].AddParagraph().AppendText("Qty");  

Step 5: Insert a nested table to the cell (first row, second column).

Table nestedTable= table[0, 1].AddTable(true);
nestedTable.ResetCells(3, 4);
nestedTable.AutoFitBehavior(AutoFitBehaviorType.wdAutoFitContents);

Step 6: Add content to nested cells.

nestedTable[0, 0].AddParagraph().AppendText("SI.No.");
nestedTable[0, 1].AddParagraph().AppendText("Item");
nestedTable[0, 2].AddParagraph().AppendText("Qty");
nestedTable[0, 3].AddParagraph().AppendText("Rate");
nestedTable[1, 0].AddParagraph().AppendText("1");
nestedTable[1, 1].AddParagraph().AppendText("Sand");
nestedTable[1, 2].AddParagraph().AppendText("30");
nestedTable[1, 3].AddParagraph().AppendText("45");
nestedTable[2, 0].AddParagraph().AppendText("2");
nestedTable[2, 1].AddParagraph().AppendText("Cement");
nestedTable[2, 2].AddParagraph().AppendText("30");
nestedTable[2, 3].AddParagraph().AppendText("50");

Step 7: Save the file.

doc.SaveToFile("Nested_Table.docx", FileFormat.Docx2013);

Output:

How to Create a Nested Table in Word in C#

Full Code:

//create a new pdf document
Document doc = new Document();
Section section = doc.AddSection();     

//add a table
Table table = section.AddTable(true);
table.ResetCells(2, 3);

//set column width
table.Rows[0].Cells[0].Width = table.Rows[0].Cells[2].Width = 50F;
table.Rows[1].Cells[0].Width = table.Rows[1].Cells[2].Width = 50F;
table.AutoFitBehavior(AutoFitBehaviorType.wdAutoFitWindow);

//insert content to cells
table[0, 0].AddParagraph().AppendText("SI.No.");
string text = "Earthwork excavation for foundation of buildings, water supply, "
             + "sanitary lines and electrical conduits either in pits or in "
             + "trenches 1.5m and above in width, in ordinary soil not exceeding "
             + "1.5m in depth including dressing the bottom and sides of pits and  "
             + "trenches, stacking the excavated soil clear.";
table[0, 1].AddParagraph().AppendText(text);
table[0, 2].AddParagraph().AppendText("Qty");  

//add a nested table to cell(first row, second column)
Table nestedTable= table[0, 1].AddTable(true);
nestedTable.ResetCells(3, 4);
nestedTable.AutoFitBehavior(AutoFitBehaviorType.wdAutoFitContents);

//add content to nested cells
nestedTable[0, 0].AddParagraph().AppendText("SI.No.");
nestedTable[0, 1].AddParagraph().AppendText("Item");
nestedTable[0, 2].AddParagraph().AppendText("Qty");
nestedTable[0, 3].AddParagraph().AppendText("Rate");
nestedTable[1, 0].AddParagraph().AppendText("1");
nestedTable[1, 1].AddParagraph().AppendText("Sand");
nestedTable[1, 2].AddParagraph().AppendText("30");
nestedTable[1, 3].AddParagraph().AppendText("45");
nestedTable[2, 0].AddParagraph().AppendText("2");
nestedTable[2, 1].AddParagraph().AppendText("Cement");
nestedTable[2, 2].AddParagraph().AppendText("30");
nestedTable[2, 3].AddParagraph().AppendText("50");

//save
doc.SaveToFile("Nested_Table.docx", FileFormat.Docx2013);

Spire.PDF allows extracting images from signatures using ExtractSignatureAsImages method in PdfFormWidget class. This article demonstrates how we can use Spire.PDF to implement this feature.

Code Snippet:

Step 1: Instantiate an object of PdfDocument class and load the PDF document.

PdfDocument document = new PdfDocument("sample.pdf");

Step 2: Get the existing forms of the document.

PdfFormWidget form = document.Form as PdfFormWidget;

Step 3: Extract images from signatures in the existing forms and put them into an Image Array.

Image[] images = form.ExtractSignatureAsImages();

Step 4: Save the images to disk.

int i = 0;
for (int j = 0; j < images.Length; j++)
{
    images[j].Save(String.Format(@"Image/Image-{0}.png", i), ImageFormat.Png);
    i++;
}

Screenshot:

How to Extract Image from Signature in PDF

Full code:

[C#]
//Load the PDF document
PdfDocument document = new PdfDocument("sample.pdf");

//Get the existing forms of the document
PdfFormWidget form = document.Form as PdfFormWidget;

//Extract images from signatures in the existing forms
Image[] images = form.ExtractSignatureAsImages();

//Save the images to disk
int i = 0;
for (int j = 0; j < images.Length; j++)
{
    images[j].Save(String.Format(@"Image/Image-{0}.png", i), ImageFormat.Png);
    i++;
}

//Close the document
document.Close();
[VB.NET]
'Load the PDF document
Dim document As New PdfDocument("sample.pdf")

'Get the existing forms of the document
Dim form As PdfFormWidget = TryCast(document.Form, PdfFormWidget)

'Extract images from signatures in the existing forms
Dim images As Image() = form.ExtractSignatureAsImages()

'Save the images to disk
Dim i As Integer = 0
For j As Integer = 0 To images.Length - 1
	images(j).Save([String].Format("Image/Image-{0}.png", i), ImageFormat.Png)
	i += 1
Next

'Close the document
document.Close()

We have already demonstrated how to set gradient background for word document in C#. Besides the gradient background, Spire.Doc also supports to add image background for word document. This article will show you how to set image background for word document in C#.

Step 1: Create a new word document and load the document from file.

Document document = new Document();
document.LoadFromFile("Sample.docx", FileFormat.Docx2010);

Step 2: Set the background type as picture.

document.Background.Type = BackgroundType.Picture;

Step 3: Load the image from file.

document.Background.Picture = Image.FromFile("background.jpg");

Step 4: Save the document to file.

document.SaveToFile("Result.docx", FileFormat.Docx2010);

Effective screenshot of adding image background for word document:

Set image background for word document in C#

Full codes of how to set image background for word document:

{
    Document document = new Document();
    document.LoadFromFile("Sample.docx", FileFormat.Docx2010);

    document.Background.Type = BackgroundType.Picture;
                     
    document.Background.Picture = Image.FromFile("background.jpg");
       
    document.SaveToFile("Result.docx", FileFormat.Docx2010);
}
Wednesday, 05 April 2017 07:29

Rearrange Pages in an Existing PDF Document

Spire.PDF allows us to rearrange the pages in an existing PDF document by using the Rearrange(int[] orderArray) method. This article explains how we can use Spire.PDF to implement this function.

Below is the screenshot of the source PDF document:

Rearrange Pages in an Existing PDF Document

Refer to below detail steps:

Step 1: Load the existing PDF document.

PdfDocument doc = new PdfDocument("New Zealand.pdf");

Step 2: Rearrange pages by page index.

doc.Pages.ReArrange(new int[] { 2, 1, 0 });

Step 3: Save and close the document.

doc.SaveToFile("Output.pdf");
doc.Close();

Screenshot after rearranging pages:

Rearrange Pages in an Existing PDF Document

Full code:

using Spire.Pdf;

namespace Rearrange_page_in_PDF
{
    class Program
    {
        static void Main(string[] args)
        {
            //Load the PDF document
            PdfDocument doc = new PdfDocument("New Zealand.pdf");

            //Rearrange pages by page index
            doc.Pages.ReArrange(new int[] { 2, 1, 0 });

            //Save and close the document
            doc.SaveToFile("Output.pdf");
            doc.Close();
        }
    }
}

A comment in Word can contain rich elements such as text, image, OLE object, and etc. This article presents how we can insert a picture to a comment in Word using Spire.Doc.

Step 1: Initialize an instance of Document class and load a sample document.

Document doc = new Document();
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.docx");

Step 2: Get the third paragraph from section one.

Paragraph paragraph = doc.Sections[0].Paragraphs[2];

Step 3: Append a comment to the paragraph.

Comment comment = paragraph.AppendComment("This is a comment.");
comment.Format.Author = "E-iceblue";   

Step 4: Insert an image to comment body.

DocPicture docPicture = new DocPicture(doc);
Image img = Image.FromFile(@"C:\Users\Administrator\Desktop\logo.png");
docPicture.LoadImage(img);
comment.Body.AddParagraph().ChildObjects.Add(docPicture);

Step 5: Save the file.

doc.SaveToFile("result.docx",FileFormat.Docx2013);

Output:

How to Insert Picture into Comment in Word in C#, VB.NET

Full Code:

[C#]
Document doc = new Document();
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.docx");
Paragraph paragraph = doc.Sections[0].Paragraphs[2];

Comment comment = paragraph.AppendComment("This is a comment.");
comment.Format.Author = "E-iceblue";         
DocPicture docPicture = new DocPicture(doc);
Image img = Image.FromFile(@"C:\Users\Administrator\Desktop\logo.png");
docPicture.LoadImage(img);
comment.Body.AddParagraph().ChildObjects.Add(docPicture);

doc.SaveToFile("result.docx",FileFormat.Docx2013);
[VB.NET]
Dim doc As New Document()
doc.LoadFromFile("C:\Users\Administrator\Desktop\sample.docx")
Dim paragraph As Paragraph = doc.Sections(0).Paragraphs(2)

Dim comment As Comment = paragraph.AppendComment("This is a comment.")
comment.Format.Author = "E-iceblue"
Dim docPicture As New DocPicture(doc)
Dim img As Image = Image.FromFile("C:\Users\Administrator\Desktop\logo.png")
docPicture.LoadImage(img)
comment.Body.AddParagraph().ChildObjects.Add(docPicture)

doc.SaveToFile("result.docx", FileFormat.Docx2013)