As increasingly diverse types of documents are created in PDF, you may find yourself with a need to protect confidential information. Although many other PDF security options are available to keep confidential information secure, the most common approach is to add a custom watermark to the PDF document. In this article, you will learn how to add a single-line or multi-line text watermark to PDF in C++ using Spire.PDF for C++.

Install Spire.PDF for C++

There are two ways to integrate Spire.PDF for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.PDF for C++ in a C++ Application

Add a Single-Line Text Watermark to PDF in C++

Spire.PDF for C++ does not provide an interface or a class responsible for inserting watermarks into PDF files. You could, however, draw text like "confidential", "do not copy", or "draft" on each page to mimic the watermark effect. The following are the steps to add a single-line text watermark to a PDF document.

  • Create a PdfDocument object.
  • Load a sample PDF document using PdfDocument->LoadFromFile() method.
  • Get a specific page from the document using PdfDocument->GetPages()->GetItem() method.
  • Translate the coordinate system to the specified coordinate using PdfPageBase->GetCanvas()->TraslateTransform() method.
  • Rotate the coordinate system 45 degrees counterclockwise using PdfPageBase->GetCanvas()->RotateTransform() method. This step and the step above make sure that the watermark will appear in the middle of the page with an angle of 45 degrees.
  • Draw a text watermark on the page using PdfPageBase->GetCanvas()->DrawString() method.
  • Save the document to a different PDF file using PdfDocument->SaveToFile() method.
  • C++
"#include ""Spire.Pdf.o.h"";

using namespace std;
using namespace Spire::Pdf;
using namespace Spire::Common;

int main()
{
	//Specify input file and output file paths
	wstring inputFilePath = L""C:\\Users\\Administrator\\Desktop\\sample.pdf"";
	wstring outputFilePath = L""Output\\SingleLineTextWatermark.pdf"";

	//Create a PdfDocument object
	PdfDocument* doc = new PdfDocument();

	//Load a PDF file
	doc->LoadFromFile(inputFilePath.c_str());

	//Create a true type font
	PdfTrueTypeFont* font = new PdfTrueTypeFont(L""Arial"", 50.0f, PdfFontStyle::Bold, true);

	//Create a brush
	PdfBrush* brush = PdfBrushes::GetDarkGray();

	//Specify watermark text
	wstring text = L""CONFIDENTIAL"";

	//Measure the text size
	SizeF textSize = font->MeasureString(text.c_str());

	//Calculate two offsets, which are used to calculate the translation amount of coordinate system
	float offset1 = (float)(textSize.GetWidth() * sqrt(2) / 4);
	float offset2 = (float)(textSize.GetHeight() * sqrt(2) / 4);

	//Traverse through the pages in the document
	for (size_t i = 0; i < doc->GetPages()->GetCount(); i++)
	{
		//Get a specific page
		PdfPageBase* page = doc->GetPages()->GetItem(i);

		//Set the page transparency
		page->GetCanvas()->SetTransparency(0.8);

		//Translate the coordinate system to a specified coordinate
		page->GetCanvas()->TranslateTransform(page->GetCanvas()->GetSize()->GetWidth() / 2 - offset1 - offset2, page->GetCanvas()->GetSize()->GetHeight() / 2 + offset1 - offset2);

		//Rotate the coordinate system 45 degrees counterclockwise
		page->GetCanvas()->RotateTransform(-45);

		//Draw watermark text on the page
		page->GetCanvas()->DrawString(text.c_str(), font, brush, 0, 0, new PdfStringFormat(PdfTextAlignment::Left));
	}

	//Save the document
	doc->SaveToFile(outputFilePath.c_str());
	doc->Close();
	delete doc;
}"

C++: Add Text Watermarks to PDF Documents

Add a Tiled Text Watermark to PDF in C++

To achieve the tiled watermark effect, you can make use of the PdfTilingBrush class. The tiling brush produces a tiled pattern that is repeated to fill a graphics area. The following are the steps to add a tiled text watermark to a PDF document.

  • Create a custom method InsertTiledTextWatermark(PdfPageBase* page, wstring watermarkText, PdfTrueTypeFont* font, int rowNum, int columnNum) to add a tiled watermark to a PDF page. The parameter rowNum and columnNum specify the row number and column number of the tiled watermark.
  • Create a PdfDocument object.
  • Load a sample PDF document using PdfDocument->LoadFromFile() method.
  • Traverse through all pages in the document, and call the custom method InsertTiledTextWatermark() to apply watermark to each page.
  • Save the document to another file using PdfDocument->SaveToFile() method.
  • C++
#include "Spire.Pdf.o.h";

using namespace std;
using namespace Spire::Pdf;

static void InsertTiledTextWatermark(PdfPageBase* page, wstring watermarkText, PdfTrueTypeFont* font, int rowNum, int columnNum)
{
	//Measure text size
	SizeF textSize = font->MeasureString(watermarkText.c_str());

	//Calculate two offsets, which are used to calculate the translation amount of coordinate system
	float offset1 = (float)(textSize.GetWidth() * sqrt(2) / 4);
	float offset2 = (float)(textSize.GetHeight() * sqrt(2) / 4);

	//Get page height and width
	float height = page->GetActualSize()->GetHeight();
	float width = page->GetActualSize()->GetWidth();

	//Create a tiling brush
	PdfTilingBrush* brush = new PdfTilingBrush(new SizeF(width / columnNum, height / rowNum));
	brush->GetGraphics()->SetTransparency(0.5f);
	brush->GetGraphics()->TranslateTransform(brush->GetSize()->GetWidth() / 2 - offset1 - offset2, brush->GetSize()->GetHeight() / 2 + offset1 - offset2);
	brush->GetGraphics()->RotateTransform(-45);

	//Draw watermark text on the brush
	brush->GetGraphics()->DrawString(watermarkText.c_str(), font, PdfBrushes::GetRed(), 0, 0, new PdfStringFormat(PdfTextAlignment::Left));

	//Draw a rectangle (that covers the whole page) using the tiling brush
	page->GetCanvas()->DrawRectangle(brush, new RectangleF(new PointF(0, 0), page->GetActualSize()));
}

int main()
{
	//Specify input file and output file paths
	wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\sample.pdf";
	wstring outputFilePath = L"Output\\MultiLineTextWatermark.pdf";

	//Create a PdfDocument object
	PdfDocument* doc = new PdfDocument();

	//Load a PDF file
	doc->LoadFromFile(inputFilePath.c_str());

	//Specify watermark text
	wstring text = L"CONFIDENTIAL";

	//Creat a true type font
	PdfTrueTypeFont* font = new PdfTrueTypeFont(L"Arial", 20.0f, PdfFontStyle::Bold, true);

	//Traverse through the pages in the document
	for (size_t i = 0; i < doc->GetPages()->GetCount(); i++)
	{
		//Call the custom method to insert multi-line text watermark
                boost::intrusive_ptr page = doc->GetPages()->GetItem(i);
                InsertTiledTextWatermark(page.get(), text.c_str(), font, 3, 3);"
	}

	//Save the document
	doc->SaveToFile(outputFilePath.c_str());
	doc->Close();
	delete doc;
}

C++: Add Text Watermarks to PDF Documents

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Adding documents as attachments to PDF brings you a lot of convenience. For example, you can transfer multiple documents as a single document; you can open another file inside a PDF document without needing to find the document from other places; you reduce the possibility of losing documents referenced in the PDF document.

Spire.PDF for C++ allows you to attach files in two ways:

  • Document Level Attachment (or Regular Attachment): A document-level attachment refers to the attachment that’s added to the Attachment tab and cannot be found on a specific page.
  • Annotation Attachment: An annotation attachment refers to the attachment that’s added to a specific position of a page. Annotation attachments are shown as a paper clip icon on the page; reviewers can double-click the icon to open the file.

This article will show you how to add or delete regular attachments and annotation attachments in a PDF document in C++ using Spire.PDF for C++.

Install Spire.PDF for C++

There are two ways to integrate Spire.PDF for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.PDF for C++ in a C++ Application

Add a Regular Attachment to PDF in C++

To add a regular attachment, use PdfDocument->GetAttachments()->Add() method. The following are the detailed steps.

  • Create a PdfDocument object.
  • Load a PDF document using PdfDocument->LoadFromFile() method.
  • Create a PdfAttachment object based on an external file.
  • Add the attachment to PDF using PdfDocument->GetAttachments()->Add() method.
  • Save the document to another PDF file using PdfDocument.SaveToFile() method.
  • C++
#include "Spire.Pdf.o.h";

using namespace Spire::Pdf;
using namespace std;

int main() {

    //Specify input file path
    wstring inputPdfPath = L"C:\\Users\\Administrator\\Desktop\\Sample.pdf";
    wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\Data.xlsx";

    //Specify output file path
    wstring outputFilePath = L"Output\\Attachment.pdf";

    //Create a PdfDocument object
    PdfDocument* doc = new PdfDocument();

    //Load a sample PDF file
    doc->LoadFromFile(inputPdfPath.c_str());

    //Create a PdfAttachment object based on an external file
    PdfAttachment* attachment = new PdfAttachment(inputFilePath.c_str());

    //Add the attachment to PDF
    doc->GetAttachments()->Add(attachment);

    //Save to file
doc->SaveToFile(outputFilePath.c_str());
delete doc;
}

C++: Add or Delete Attachments in PDF Documents

Add an Annotation Attachment to PDF in C++

An annotation attachment is represented by the PdfAttachmentAnnotation class. You need to create an instance of the class based on an external file, and then add it to a specific page using PdfPageBase->GetAnnotationsWidget()->Add() method. The following are the detailed steps.

  • Create a PdfDocument object.
  • Load a PDF document using PdfDocument->LoadFromFile() method.
  • Get a specific page to add annotation using PdfDocument->GetPages()->GetItem() method.
  • Create a PdfAttachmentAnnotation object based on an external file.
  • Add the annotation attachment to the page using PdfPageBase->GetAnnotationsWidget->Add() method.
  • Save the document using PdfDocument->SaveToFile() method.
  • C++
"#include "Spire.Pdf.o.h";

using namespace Spire::Pdf;
using namespace std;

int main() {

    //Specify input file path
    wstring inputPdfPath = L"C:\\Users\\Administrator\\Desktop\\Attachment.pdf";
    wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\Report.docx";

    //Specify output file path 
    wstring outputFilePath = L"Output\\AnnotationAttachment.pdf";

    //Create a PdfDocument object
    PdfDocument* doc = new PdfDocument();

    //Load a sample PDF file
    doc->LoadFromFile(inputPdfPath.c_str());

    //Get a specific page
    boost::intrusive_ptr page = doc->GetPages()->GetItem(0);

    //Draw a label on PDF
    wstring label = L"Here is the report:";
    PdfTrueTypeFont* font = new PdfTrueTypeFont(L"Arial", 13.0f, PdfFontStyle::Bold, true);
    float x = 35;
    float y = doc->GetPages()->GetItem(0)->GetActualSize()->GetHeight() - 220;
    page->GetCanvas()->DrawString(label.c_str(), font, PdfBrushes::GetRed(), x, y);

    //Convert the file to be attached to stream
    ifstream is1(inputFilePath.c_str(), ifstream::in | ios::binary);
    is1.seekg(0, is1.end);
    int length1 = is1.tellg();
    is1.seekg(0, is1.beg);
    char* buffer1 = new  char[length1];
    is1.read(buffer1, length1);
    Stream* stream = new Spire::Pdf::Stream((unsigned char*)buffer1, length1);
    boost::intrusive_ptr  size = font->MeasureString(label.c_str());
    RectangleF* bounds = new RectangleF((float)(x + size->GetWidth() + 5), (float)y, 10, 15);

    //Create a PdfAttachmentAnnotation object based on the file
    PdfAttachmentAnnotation* annotation = new PdfAttachmentAnnotation(bounds, L"Report.docx", stream);
    annotation->SetColor(new PdfRGBColor(Spire::Pdf::Color::GetDarkOrange()));
    annotation->SetFlags(PdfAnnotationFlags::ReadOnly);
    annotation->SetIcon(PdfAttachmentIcon::Graph);
    annotation->SetText(L"Click here to open the file");

    //Add the attachment annotation to PDF
    page->GetAnnotationsWidget()->Add(annotation);

    //Save to file
    doc->SaveToFile(outputFilePath.c_str());
    delete doc;
}"

C++: Add or Delete Attachments in PDF Documents

Delete Regular Attachments in PDF in C++

The PdfDocument->GetAttachments() method returns a collection of regular attachments of a PDF document. A specific attachment or all attachments can be removed by using PdfAttachmentCollection->RemoveAt() method or PdfAttachmentCollection->Clear() method. The detailed steps are as follows.

  • Create a PdfDocument object.
  • Load a PDF document using PdfDocument->LoadFromFile() method.
  • Get the attachment collection from the document using PdfDocument->GetAttachments() method.
  • Remove a specific attachment using PdfAttachmentCollection->RemoveAt() method. To remove all attachments at once, use PdfAttachmentCollection->Clear() method.
  • Save the document using PdfDocument->SaveToFile() method.
  • C++
#include "Spire.Pdf.o.h";

using namespace Spire::Pdf;
using namespace std;

int main() {

	//Specify input file path
	wstring inputPdfPath = L"C:\\Users\\Administrator\\Desktop\\Sample.pdf";

	//Specify output file path
	wstring outputFilePath =  L"Output\\DeleteAttachments.pdf";

	//Create a PdfDocument object
	PdfDocument* doc = new PdfDocument();

	//Load a PDF file
	doc->LoadFromFile(inputPdfPath.c_str());

	//Get all attachments
	boost::intrusive_ptr attachments = doc->GetAttachments();

	//Delete all attachments
	attachments->Clear();

	//Delete a specific attachment
	//attachments->RemoveAt(0);

	//Save the document
	doc->SaveToFile(outputFilePath.c_str());
	doc->Close();
	delete doc;
}

Delete Annotation Attachments in PDF in C++

The annotation is a page-based element. You can get annotations from a specific page using PdfPageBase->GetAnnotationsWidget() method, and determine if a certain annotation is an annotation attachment. After that, remove the annotation attachment from the annotation collection using PdfAnnotationCollection->Remove() method. The following are the detailed steps.

  • Create a PdfDocument object.
  • Load a PDF document using PdfDocument->LoadFromFile() method.
  • Get the annotation collection from a specific page using PdfPageBase->GetAnnotationsWidget() method.
  • Determine if an annotation is an instance of PdfAttachmentAnnotationWidget. If yes, remove the annotation attachment using PdfAnnotationCollection->Remove() method.
  • Save the document using PdfDocument->SaveToFile() method.
  • C++
#include "Spire.Pdf.o.h";

using namespace Spire::Pdf;
using namespace std;

int main() {

    //Specify input file path
    wstring inputPdfPath = L"C:\\Users\\Administrator\\Desktop\\AnnotationAttachment.pdf";

    //Specify output file path
    wstring outputFilePath = L"Output\\DeleteAnnotationAttachments.pdf";

    //Create a PdfDocument object
    PdfDocument* doc = new PdfDocument();

    //Load a PDF file
    doc->LoadFromFile(inputPdfPath.c_str());

    //Loop through the pages
    for (int i = 0; i < doc->GetPages()->GetCount(); i++)
    {
        //Get the annotation collection
        boost::intrusive_ptr  annotationCollection = doc->GetPages()->GetItem(i)->GetAnnotationsWidget();

        //Loop through the annotations
        for (int j = 0; j < annotationCollection->GetCount(); j++)
        {
            //Get a specific annotation
            boost::intrusive_ptr  annotation = annotationCollection->GetItem(j);

            //Determine if the annotation is an instance of PdfAttachmentAnnotationWidget
            wstring content;
            wchar_t nm_w[100];
            swprintf(nm_w, 100, L"%hs", typeid(PdfAttachmentAnnotationWidget).name());
            LPCWSTR_S newName = nm_w;
            if (wcscmp(newName, annotation->GetInstanceTypeName()) == 0) {

                //Remove the annotation attachment 
                annotationCollection->RemoveAt(j);
            }
        }
    }

    //Save the document
    doc->SaveToFile(outputFilePath.c_str());
    doc->Close();
    delete doc;
}

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

A background color or picture can help make a document more aesthetically pleasing and attention-grabbing. If you are creating a document for marketing, education, or presentation purposes, adding an attractive background color or picture would be very useful. In this article, we will demonstrate how to programmatically add background color or picture to Word documents in C++ using Spire.Doc for C++.

Install Spire.Doc for C++

There are two ways to integrate Spire.Doc for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Doc for C++ in a C++ Application

Add a Background Color to Word in C++

Adding a background color to a Word document is very straightforward using Spire.Doc for C++. You just need to set the document’s background type as color and then specify a color as the background. The detailed steps are as follows.

  • Initialize an instance of the Document class.
  • Load a Word document using Document->LoadFromFile() method.
  • Get the document's background using Document->GetBackground() method.
  • Set the background type as color using Background->SetType(BackgroundType::Color) method.
  • Set the background color using Background->SetColor() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main()
{
	//Initialize an instance of the Document class
	intrusive_ptr<Document> document = new Document();
	//Load a Word document
	document->LoadFromFile(L"Sample.docx");

	//Get the document's background
	intrusive_ptr <Background> background = document->GetBackground();
	//Set the background type as color
	background->SetType(BackgroundType::Color);
	//Set the background color
	background->SetColor(Color::GetAliceBlue());

	//Save the result document
	document->SaveToFile(L"AddBackgroundColor.docx", FileFormat::Docx2013);
	document->Close();
}

C++: Add Background Color or Picture to Word Documents

Add a Gradient Background to Word in C++

To add a gradient background, you need to set the background type as gradient, specify the gradient color and then set the gradient shading variant and style. The detailed steps are as follows.

  • Initialize an instance of the Document class.
  • Load a Word document using Document->LoadFromFile() method.
  • Get the document's background using Document->GetBackground() method.
  • Set the background type as gradient using Background->SetType(BackgroundType::Gradient) method.
  • Specify two gradient colors using Background->GetGradient()->SetColor1() and Background->GetGradient()->SetColor2() methods.
  • Set gradient shading variant and style using Background->GetGradient()->SetShadingVariant() and Background->GetGradient()->SetShadingStyle() methods.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main()
{
	//Initialize an instance of the Document class
	intrusive_ptr <Document> document = new Document();
	//Load a Word document
	document->LoadFromFile(L"Sample.docx");

	//Get the document's background
	intrusive_ptr <Background> background = document->GetBackground();
	//Set the background type as gradient
	background->SetType(BackgroundType::Gradient);

	//Specify two gradient colors 
	background->GetGradient()->SetColor1(Color::GetWhite());
	background->GetGradient()->SetColor2(Color::GetLightBlue());

	//Set gradient shading variant and style
	background->GetGradient()->SetShadingVariant(GradientShadingVariant::ShadingDown);
	background->GetGradient()->SetShadingStyle(GradientShadingStyle::Horizontal);

	//Save the result document
	document->SaveToFile(L"AddGradientBackground.docx", FileFormat::Docx2013);
	document->Close();
}

C++: Add Background Color or Picture to Word Documents

Add a Background Picture to Word in C++

To add a background image to a Word document, you need to set the background type as picture, and then insert a picture as the background. The detailed steps are as follows.

  • Initialize an instance of the Document class.
  • Load a Word document using Document->LoadFromFile() method.
  • Get the document's background using Document->GetBackground() method.
  • Set the background type as picture using Background->SetType(BackgroundType::Picture) method.
  • Set the background picture using Background->SetPicture() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main()
{
	//Initialize an instance of the Document class
	intrusive_ptr <Document> document = new Document();
	//Load a Word document
	document->LoadFromFile(L"Sample.docx");

	//Get the document's background
	intrusive_ptr <Background> background = document->GetBackground();
	//Set the background type as picture
	background->SetType(BackgroundType::Picture);

	//Set the background picture
	background->SetPicture(L"background.png");

	//Save the result document
	document->SaveToFile(L"AddBackgroundPicture.docx", FileFormat::Docx2013);
	document->Close();
}

C++: Add Background Color or Picture to Word Documents

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Monday, 27 February 2023 00:57

C++: Insert or Remove Page Breaks in Word

In MS Word, a Page Break is an important feature of page layout that helps you start a new page wherever you want. After inserting page breaks, all formatting of the previous page applies to the new page, which makes the whole document neat and well organized. In this article, you will learn how to programmatically add or remove page breaks in a Word document using Spire.Doc for C++.

Install Spire.Doc for C++

There are two ways to integrate Spire.Doc for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Doc for C++ in a C++ Application

Insert a Page Break after a Specific Paragraph in Word in C++

Spire.Doc for C++ offers the Paragraph->AppendBreak(BreakType::PageBreak) method to insert a page break after a paragraph. Once inserted, a symbol indicating the page break will be shown. The following are the detailed steps.

  • Create a Document instance.
  • Load a Word document using Document->LoadFromFile() method.
  • Get a specified section using Document->GetSections()->GetItem(sectionIndex) method.
  • Get a specified paragraph using Section->GetParagraphs()->GetItem(paragraphIndex) method.
  • Add a page break to end of the paragraph using Paragraph->AppendBreak(BreakType::PageBreak) method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main() {
 //Specify input file path and name
 std::wstring input_path = L"Data\\";
 std::wstring inputFile = input_path + L"Input.docx";

 //Specify output file path and name
 std::wstring output_path = L"Output\\";
 std::wstring outputFile = output_path + L"InsertPageBreak.docx";

 //Create a Document instance
 intrusive_ptr<Document> document = new Document();

 //Load a Word document from disk
 document->LoadFromFile(inputFile.c_str());

 //Get the first section
 intrusive_ptr<Section> section = document->GetSections()->GetItemInSectionCollection(0);

 //Get the 2nd paragraph in the section
 intrusive_ptr <Paragraph> paragraph = section->GetParagraphs()->GetItemInParagraphCollection(1);

 //Insert a page break after the paragraph
 paragraph->AppendBreak(BreakType::PageBreak);

 //Save the result document
 document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
 document->Close();
}

C++: Insert or Remove Page Breaks in Word

Insert a Page Break after a Specific Text in Word in C++

In addition to inserting a page break after a paragraph, Spire.Doc for C++ also allows you to find a specified text and then insert the page break after the specified text. The following are the detailed steps.

  • Create a Document instance.
  • Load a Word document using Document->LoadFromFile() method.
  • Find a specified text using Document->FindString() method.
  • Get the text range of the specified text using TextSelection->GetAsOneRange() method.
  • Get the paragraph where the text range is located using TextRange->GetOwnerParagraph() method.
  • Get the position index of the text range in the paragraph using Paragraph->GetChildObjects()->IndexOf() method.
  • Initialize an instance of Break class to create a page break.
  • Insert the page break after the specified text using Paragraph->GetChildObjects()->Insert() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main() {
 //Specify input file path and name
 std::wstring input_path = L"Data\\";
 std::wstring inputFile = input_path + L"Input.docx";

 //Specify output file path and name
 std::wstring output_path = L"Output\\";
 std::wstring outputFile = output_path + L"InsertPageBreakAfterText.docx";

 //Create a Document instance
 intrusive_ptr<Document> document = new Document();

 //Load a Word document from disk
 document->LoadFromFile(inputFile.c_str());

 //Find a specified text
 intrusive_ptr<TextSelection> selection = document->FindString(L"infrastructure", true, true);

 //Get the text range of the specified text
 intrusive_ptr<TextRange> range = selection->GetAsOneRange();

 //Get the paragraph where the text range is located
 intrusive_ptr<Paragraph> paragraph = range->GetOwnerParagraph();

 //Get the position index of the text range in the paragraph
 int index = paragraph->GetChildObjects()->IndexOf(range);

 //Create a page break
 intrusive_ptr<Break> pageBreak = new Break(document, BreakType::PageBreak);

 //Insert a page break after the specified text
 paragraph->GetChildObjects()->Insert(index + 1, pageBreak);

 //Save to result document
 document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
 document->Close();
}

C++: Insert or Remove Page Breaks in Word

Remove Page Breaks in a Word Document in C++

Some mistakenly added page breaks can mess up the structure of your entire document, so it's quite necessary to remove them. The following are the steps to remove page breaks in a Word document.

  • Create a Document instance.
  • Load a Word document using Document->LoadFromFile() method.
  • Traverse through each paragraph in the first section, and then traverse through each child object of a paragraph.
  • Determine whether the child object type is a page break. If yes, remove the page break from the paragraph using Paragraph->GetChildObjects()->Remove() method.
  • Save the result document using Document->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main() {
 //Specify input file path and name
 std::wstring input_path = L"Data\\";
 std::wstring inputFile = input_path + L"InsertPageBreak.docx";

 //Specify output file path and name
 std::wstring output_path = L"Output\\";
 std::wstring outputFile = output_path + L"RemovePageBreaks.docx";

 //Create a Document instance
 intrusive_ptr<Document> document = new Document();

 //Load a Word document from disk
 document->LoadFromFile(inputFile.c_str());

 //Traverse through each paragraph in the first section of the document
 for (int j = 0; j < document->GetSections()->GetItemInSectionCollection(0)->GetParagraphs()->GetCount(); j++)
 {
  intrusive_ptr<Paragraph> p = document->GetSections()->GetItemInSectionCollection(0)->GetParagraphs()->GetItemInParagraphCollection(j);

  //Traverse through each child object of a paragraph
  for (int i = 0; i < p->GetChildObjects()->GetCount(); i++)
  {
   intrusive_ptr <DocumentObject> obj = p->GetChildObjects()->GetItem(i);

   //Determine whether the child object type is a page break
   if (Object::CheckType<Break>(obj) && (Object::Dynamic_cast<Break>(obj))->GetBreakType() == BreakType::PageBreak)
   {
    //Remove the page break from the paragraph
    p->GetChildObjects()->Remove(obj);
   }
  }
 }

 //Save the result document
 document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
 document->Close();
}

C++: Insert or Remove Page Breaks in Word

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Friday, 24 February 2023 00:57

C++: Convert Word to PDF

PDF is one of the most versatile, universal and feature-rich file formats in use today. Compared to Word, PDF documents are less likely to lose formatting when they’re opened on various devices. Additionally, PDF has absolute advantages over Word in terms of document security, archiving and transmission. These are some of the reasons why we should convert Word to PDF. In this article, you will learn how to convert Word to PDF and how to set conversion options in C++ using Spire.Doc for C++.

Install Spire.Doc for C++

There are two ways to integrate Spire.Doc for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Doc for C++ in a C++ Application

Convert Doc or Docx to PDF in C++

The Document->SaveToFile(LPCWSTR_S fileName, FileFormat fileFormat) method provided by Spire.Doc for C++ allows to save Word as PDF, XPS, HTML, RTF, etc. If you just want to save your Word documents as regular PDFs without additional settings, follow the steps below.

  • Create a Document object.
  • Load a sample Word file using Document->LoadFromFile() method.
  • Save the document to PDF using Doucment->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

 //Specify input file path
 wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\sample.docx";

 //Specify output file path and name
 wstring outputPath = L"Output\\";
 wstring outputFile = outputPath + L"ToPDF.pdf";

 //Create a Document object
 intrusive_ptr<Document> document = new Document();

 //Load a Word file
 document->LoadFromFile(inputFilePath.c_str());

 //Save the document to PDF
 document->SaveToFile(outputFile.c_str(), FileFormat::PDF);
 document->Close();
}

C++: Convert Word to PDF

Convert Word to PDF with Bookmarks in C++

Bookmarks can enhance the readability of a document. When generating PDF from Word, you may would like to preserve existing bookmarks of the Word document or create bookmarks from the headings. The following are the steps to convert Word to PDF with bookmarks.

  • Create a Document object.
  • Load a sample Word file using Document->LoadFromFile() method.
  • Create a ToPdfParameterList object, which is used to set conversion options.
  • Create bookmarks in PDF from the headings in Word using ToPdfParameterList.SetCreateWordBookmarksUsingHeadings() method.
  • Save the document to PDF with bookmarks using Doucment->SaveToFile(LPCWSTR_S fileName, ToPdfParameterList* paramList) method.
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

 //Specify input file path
 wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\sample.docx";

 //Specify output file path and name
 wstring outputPath = L"Output\\";
 wstring outputFile = outputPath + L"ToPDF.pdf";

 //Create a Document object
 intrusive_ptr<Document> document = new Document();

 //Load a Word file
 document->LoadFromFile(inputFilePath.c_str());

 //Create a ToPdfParameterList object
 intrusive_ptr<ToPdfParameterList> parameters = new ToPdfParameterList();

 //Create bookmarks from Word headings
 parameters->SetCreateWordBookmarksUsingHeadings(true);

 //Create bookmarks in PDF from existing bookmarks in Word
 //parameters->SetCreateWordBookmarks(true);

 //Save the document to PDF
 document->SaveToFile(outputFile.c_str(), parameters);
 document->Close();
}

C++: Convert Word to PDF

Convert Word to PDF with Fonts Embedded in C++

By embedding fonts used in a Word document into the PDF document, you ensure that the PDF document looks the same on any device that does not have the appropriate fonts installed. The steps to embed fonts in PDF during conversion are as follows.

  • Create a Document object.
  • Load a sample Word file using Document->LoadFromFile() method.
  • Create a ToPdfParameterList object, which is used to set conversion options.
  • Embed fonts in generated PDF using ToPdfParameterList.SetIsEmbeddedAllFonts() method.
  • Save the document to PDF using Doucment->SaveToFile(LPCWSTR_S fileName, ToPdfParameterList* paramList) method.
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

 //Specify input file path
 wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\sample.docx";

 //Specify output file path and name
 wstring outputPath = L"Output\\";
 wstring outputFile = outputPath + L"ToPDF.pdf";

 //Create a Document object
 intrusive_ptr<Document> document = new Document();

 //Load a Word file
 document->LoadFromFile(inputFilePath.c_str());

 //Create a ToPdfParameterList object
 intrusive_ptr<ToPdfParameterList> parameters = new ToPdfParameterList();

 //Embed fonts used in Word in generated PDF
 parameters->SetIsEmbeddedAllFonts(true);

 //Save the document to PDF
 document->SaveToFile(outputFile.c_str(), parameters);
 document->Close();
}

C++: Convert Word to PDF

Set Image Quality When Converting Word to PDF in C++

A document containing a large number of high-quality images will often be large in size. When you convert Word to PDF, you can decide whether to compress the image quality or not. The following are the detailed steps.

  • Create a Document object.
  • Load a sample Word file using Document->LoadFromFile() method.
  • Set the image quality using Document->SetJPEGQuality() mehtod
  • Save the document to PDF using Doucment->SaveToFile() method.
  • C++
#include "Spire.Doc.o.h";

using namespace Spire::Doc;
using namespace std;

int main() {

 //Specify input file path
 wstring inputFilePath = L"C:\\Users\\Administrator\\Desktop\\sample.docx";

 //Specify output file path and name
 wstring outputPath = L"Output\\";
 wstring outputFile = outputPath + L"ToPDF.pdf";

 //Create a Document object
 intrusive_ptr<Document> document = new Document();

 //Load a Word file
 document->LoadFromFile(inputFilePath.c_str());

 //Compress image to 40% of the original quality
 document->SetJPEGQuality(40);

 //Preserve original image quality
 //document->SetJPEGQuality(100);

 //Save the document to PDF
 document->SaveToFile(outputFile.c_str(), FileFormat::PDF);
 document->Close();
}

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Wednesday, 22 February 2023 01:05

C++: Extract Text and Images from Word Documents

Extracting text and images is a common requirement while working with Word documents. This will help you to save useful content out of the original document to re-use in a new document or for other purposes. In this article, you will learn how to extract text or images from a Word document using Spire.Doc for C++.

Install Spire.Doc for C++

There are two ways to integrate Spire.Doc for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.Doc for C++ in a C++ Application

Extract Text from a Word Document in C++

To extract the text content from an existing Word document, Spire.Doc for C++ provides the Document->GetText() method. The following are steps to extract text and save in a TXT file.

  • Create a Document instance.
  • Load a sample Word document using Document->LoadFromFile() method.
  • Get text from the document using Document->GetText() method.
  • Create a new txt file and write the extracted text to the file.
  • C++
#include "Spire.Doc.o.h"

using namespace Spire::Doc;

int main() {
 //Specify input file path and name
 std::wstring data_path = L"Data\\";
 std::wstring inputFile = data_path + L"input.docx";

 //Specify output file path and name
 std::wstring outputPath = L"Output\\";
 std::wstring outputFile = outputPath + L"GetText.txt";

 //Create a Document instance
 intrusive_ptr<Document> document = new Document();

 //Load a sample Word document from disk
 document->LoadFromFile(inputFile.c_str());

 //Get text from the document
 std::wstring text = document->GetText();

 //Create a new TXT File to save the extracted text
 std::wofstream write(outputFile);
 write << text;
 write.close();
 document->Close();
}

C++: Extract Text and Images from Word Documents

Extract Images from a Word Document in C++

For a Word document with a lot of images, manually saving these images one by one is quite time-consuming. Below are steps to extract all images at once using Spire.Doc for C++.

  • Load a sample Word document using Document->LoadFromFile() method.
  • Append the document to the end of the deque, and then create a vector of images list.
  • Traverse through all child objects of the document.
  • Determine whether the object type is picture. If yes, get each image using DocPicture->GetImage() method and add it to the list.
  • Save the extracted images out of the document in a specified output file path.
  • C++
#include "Spire.Doc.o.h"
#include <deque>

using namespace Spire::Doc;

int main() {
 //Specify input file path and name
 std::wstring data_path = L"Data\\";
 std::wstring inputFile = data_path + L"input.docx";

 //Specify output file path and name
 std::wstring outputPath = L"Output\\";
 std::wstring outputFile = outputPath + L"ExtractImage/";

 //Load a sample Word document
 intrusive_ptr<Document> document = new Document();
 document->LoadFromFile(inputFile.c_str());

 //Append the document to the end of the deque
 std::deque<intrusive_ptr<ICompositeObject>> nodes;
 nodes.push_back(document);

 //Create a vector of images list
 std::vector<std::vector<byte>> images;

 //Traverse through all child objects of the document
 while (nodes.size() > 0)
 {
  intrusive_ptr<ICompositeObject> node = nodes.front();
  nodes.pop_front();
  for (int i = 0; i < node->GetChildObjects()->GetCount(); i++)
  {
   intrusive_ptr<IDocumentObject> child = node->GetChildObjects()->GetItem(i);
   if (child->GetDocumentObjectType() == DocumentObjectType::Picture)
   {
    intrusive_ptr<DocPicture> picture = Object::Dynamic_cast<DocPicture>(child);
    std::vector<byte> imageByte = picture->GetImageBytes();
    images.push_back(imageByte);
   }
   else if (Object::CheckType<ICompositeObject>(child))
   {
    nodes.push_back(boost::dynamic_pointer_cast<ICompositeObject>(child));
   }
  }
 }
 //Save the images out of the document
 for (size_t i = 0; i < images.size(); i++)
 {
  std::wstring fileName = L"Image-" + std::to_wstring(i) + L".png";
  std::ofstream outFile(fileName, std::ios::binary);
  if (outFile.is_open())
  {
   outFile.write(reinterpret_cast<const char*>(images[i].data()), images[i].size());
   outFile.close();
  }
 }
 document->Close();
}

C++: Extract Text and Images from Word Documents

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Thursday, 09 February 2023 01:01

C++: Merge Multiple PDF Files into a Single PDF

Merging multiple PDF files into a single PDF can help you reduce clutter and let you read, print, and share the files more easily. After merging, you only need to deal with one file instead of multiple files. In this article, you will learn how to merge multiple PDF files into a single PDF in C++ using Spire.PDF for C++.

Install Spire.PDF for C++

There are two ways to integrate Spire.PDF for C++ into your application. One way is to install it through NuGet, and the other way is to download the package from our website and copy the libraries into your program. Installation via NuGet is simpler and more recommended. You can find more details by visiting the following link.

Integrate Spire.PDF for C++ in a C++ Application

Merge Multiple PDF Files into a Single PDF in C++

Spire.PDF for C++ offers a static method - PdfDocument::MergeFiles(std::vector<LPCWSTR_S> inputFiles) which enables you to merge multiple PDF files into a single PDF file easily. The following are the detailed steps:

  • Put the input PDF files' paths into a vector.
  • Merge the PDF files specified by the paths in the vector using PdfDocument::MergeFiles(std::vector<LPCWSTR_S> inputFiles) method.
  • Specify the output file path.
  • Save the result PDF file using PdfDocumentBase->Save() method.
  • C++
#include "Spire.Pdf.o.h"

using namespace Spire::Pdf;
using namespace std;

int main() {
	//Put the input PDF files' paths into a vector
	std::vector<LPCWSTR_S> files = { L"Input\\File_1.pdf", L"Input\\File_2.pdf", L"Input\\File_3.pdf" };

	//Merge the PDF files specified by the paths in the vector
    oost::intrusive_ptr ⁢PdfDocumentBase>  doc = PdfDocument::MergeFiles(files);"

	//Specify the output file path
	wstring outputFile = L"Output\\MergePdfs.pdf";

	//Save the result PDF file
	doc->Save(outputFile.c_str(), FileFormat::PDF);
	doc->Close();
}

C++: Merge Multiple PDF Files into a Single PDF

Merge Multiple PDF Files from Streams in C++

You can use the PdfDocument::MergeFiles(std::vector< Stream*> streams) method to merge multiple PDF streams into a single PDF. The following are the detailed steps:

  • Read the input PDF files into streams.
  • Put the streams into a vector.
  • Merge the PDF streams using PdfDocument::MergeFiles(std::vector< Stream*> streams) method.
  • Save the result PDF file using PdfDocumentBase->Save() method.
  • C++
#include "Spire.Pdf.o.h"

using namespace Spire::Pdf;
using namespace std;

int main() {
	//Read the input PDF files into streams
	Stream* stream1 = new Stream(L"Input\\File_1.pdf");
	Stream* stream2 = new Stream(L"Input\\File_2.pdf");
	Stream* stream3 = new Stream(L"Input\\File_3.pdf");

        //Put the streams into a vector
	std::vector> streams = { stream1, stream2, stream3 };

	//Merge the PDF streams
	oost::intrusive_ptr ⁢PdfDocumentBase> doc = PdfDocument::MergeFiles(streams);"


	//Specify the output file path
	wstring outputFile = L"Output\\MergePdfs.pdf";

	//Save the result PDF file
	doc->Save(outputFile.c_str(), FileFormat::PDF);
	doc->Close();
}

Merge Selected Pages of PDF Files into a Single PDF in C++

You can merge a specific page or a range of pages of multiple PDF files into a single PDF file using PdfDocument->InsertPage(PdfDocument ldDoc, int pageIndex) or PdfDocument->InsertPageRange(PdfDocument ldDoc, int startIndex, int endIndex) method. The following are the detailed steps:

  • Put the input PDF files' paths into a vector.
  • Create a vector of PdfDocument objects.
  • Iterate through the paths in the vector.
  • Load the PDF files specified by the paths using PdfDocument->LoadFromFile() method.
  • Initialize an instance of PdfDocument class to create a new PDF document.
  • Insert a specific page or a range of pages from the loaded PDF files into the new PDF using PdfDocument->InsertPage(PdfDocument ldDoc, int pageIndex) or PdfDocument->InsertPageRange(PdfDocument ldDoc, int startIndex, int endIndex) method.
  • Save the result PDF using PdfDocument->SaveToFile() method.
  • C++
#include "Spire.Pdf.o.h"

using namespace Spire::Pdf;
using namespace std;
using namespace Spire::Common;

int main() {

	//Put the input PDF files' paths into a vector
	std::vector<std::wstring> files = { L"Input\\File_2.pdf", L"Input\\File_4.pdf" };

	//Create a vector of PdfDocument objects
	std::vector<PdfDocument*> docs(files.size());

	//Iterate through the paths in the vector
	for (int i = 0; i < files.size(); i++)
	{
		//Load the PDF files specified by the paths
		docs[i] = new PdfDocument();
		docs[i]->LoadFromFile(files[i].c_str());
	}

	//Create a new PDF document
	PdfDocument* newDoc = new PdfDocument();

	//Insert pages 1-2 of the first PDF into the new PDF
	newDoc->InsertPageRange(docs[0], 0, 1);
	//Insert page 1 of the second PDF into the new PDF
	newDoc->InsertPage(docs[1], 0);

	//Specify the output file path
	wstring outputFile = L"Output\\MergePdfs.pdf";

	//Save the result pdf file
	newDoc->SaveToFile(outputFile.c_str());

	//Close the PdfDocument objects
	newDoc->Close();
	for (auto doc : docs)
	{
		doc->Close();
	}
}

C++: Merge Multiple PDF Files into a Single PDF

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

Picture files are among the most commonly used types of documents in people's lives. Sometimes, you may want to take all image files in a folder and convert them into slides for a PowerPoint presentation. Depending on your requirements, you can convert images to shapes or slide backgrounds. This article demonstrates how to convert images (in any common image format) to a PowerPoint document in Java using Spire.Presentation for Java.

Install Spire.Presentation for Java

First, you're required to add the Spire.Presentation.jar file as a dependency in your Java program. The JAR file can be downloaded from this link. If you use Maven, you can easily import the JAR file in your application by adding the following code to your project's pom.xml file.

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.presentation</artifactId>
        <version>11.1.1</version>
    </dependency>
</dependencies>

Convert Images to Backgrounds in PowerPoint in Java

When images are converted as background of each slide in a PowerPoint document, they cannot be moved or scaled. The following are the steps to convert a set of images to a PowerPoint file as background images using Spire.Presentation for Java.

  • Create a Presentation object.
  • Set the slide size type to Sreen16x9.
  • Get the image paths from a folder.
  • Traverse through the images.
  • Get a specific image and append it to the image collection of the document using Presentation.getImages().append() method.
  • Add a slide to the document using Presentation.getSlides().append() method.
  • Set the image as the background of the slide using the methods under SlideBackground object.
  • Save the document to a PowerPoint file using Presentation.saveToFile() method.
  • Java
import com.spire.presentation.*;
import com.spire.presentation.drawing.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;

public class ConvertImagesAsBackground {

    public static void main(String[] args) throws Exception {

        //Create a Presentation object
        Presentation presentation = new Presentation();

        //Set slide size type
        presentation.getSlideSize().setType(SlideSizeType.SCREEN_16_X_9);

        //Remove the default slide
        presentation.getSlides().removeAt(0);

        //Get image files from a folder
        File directoryPath = new File("C:\\Users\\Administrator\\Desktop\\Images");
        File[] picFiles  = directoryPath.listFiles();

        //Loop through the images
        for (int i = 0; i < picFiles.length; i++)
        {
            //Add a slide
            ISlide slide = presentation.getSlides().append();

            //Get a specific image
            String imageFile = picFiles[i].getAbsolutePath();

            //Append it to the image collection
            BufferedImage bufferedImage =  ImageIO.read(new FileInputStream(imageFile));
            IImageData imageData = presentation.getImages().append(bufferedImage);

            //Set the image as the background image of the slide
            slide.getSlideBackground().setType(BackgroundType.CUSTOM);
            slide.getSlideBackground().getFill().setFillType(FillFormatType.PICTURE);
            slide.getSlideBackground().getFill().getPictureFill().setFillType(PictureFillType.STRETCH);
            slide.getSlideBackground().getFill().getPictureFill().getPicture().setEmbedImage(imageData);
        }

        //Save to file
        presentation.saveToFile("output/ImagesToBackground.pptx", FileFormat.PPTX_2013);
    }
}

Java: Convert Images (PNG, JPG, BMP, etc.) to PowerPoint

Convert Images to Shapes in PowerPoint in Java

If you would like the images are moveable and resizable in the PowerPoint file, you can convert them as shapes. Below are the steps to convert images to shapes in a PowerPoint document using Spire.Presentation for Java.

  • Create a Presentation object.
  • Set the slide size type to Sreen16x9.
  • Get the image paths from a folder.
  • Traverse through the images.
  • Get a specific image and append it to the image collection of the document using Presentation.getImages().append() method.
  • Add a slide to the document using Presentation.getSlides().append() method.
  • Add a shape with the size equal to the slide using ISlide.getShapes().appendShape() method.
  • Fill the shape with the image using the methods under FillFormat object.
  • Save the document to a PowerPoint file using Presentation.saveToFile() method.
  • Java
import com.spire.presentation.*;
import com.spire.presentation.drawing.*;

import javax.imageio.ImageIO;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;

public class ConvertImageToShape {

    public static void main(String[] args) throws Exception {

        //Create a Presentation object
        Presentation presentation = new Presentation();

        //Set slide size type
        presentation.getSlideSize().setType(SlideSizeType.SCREEN_16_X_9);

        //Remove the default slide
        presentation.getSlides().removeAt(0);

        //Get image files from a folder
        File directoryPath = new File("C:\\Users\\Administrator\\Desktop\\Images");
        File[] picFiles  = directoryPath.listFiles();

        //Loop through the images
        for (int i = 0; i < picFiles.length; i++)
        {
            //Add a slide
            ISlide slide = presentation.getSlides().append();

            //Get a specific image
            String imageFile = picFiles[i].getAbsolutePath();

            //Append it to the image collection
            BufferedImage bufferedImage =  ImageIO.read(new FileInputStream(imageFile));
            IImageData imageData = presentation.getImages().append(bufferedImage);

            //Add a shape with the size equal to the slide
            IAutoShape shape = slide.getShapes().appendShape(ShapeType.RECTANGLE, new Rectangle2D.Float(0, 0, (float) presentation.getSlideSize().getSize().getWidth(), (float)presentation.getSlideSize().getSize().getHeight()));

            //Fill the shape with image
            shape.getLine().setFillType(FillFormatType.NONE);
            shape.getFill().setFillType(FillFormatType.PICTURE);
            shape.getFill().getPictureFill().setFillType(PictureFillType.STRETCH);
            shape.getFill().getPictureFill().getPicture().setEmbedImage(imageData);
        }

        //Save to file
        presentation.saveToFile("output/ImagesToShape.pptx", FileFormat.PPTX_2013);
    }
}

Java: Convert Images (PNG, JPG, BMP, etc.) to PowerPoint

Convert Images to PowerPoint with Customized Slide Size in Java

If the aspect ratio of your images is not 16:9, or they are not in a standard slide size, you can create slides based on the actual size of the pictures. This will prevent the image from being over stretched or compressed. The following are the steps to convert images to a PowerPoint document with customized slide size using Spire.Presentation for Java.

  • Create a Presentation object.
  • Create a PdfUnitConvertor object, which is used to convert pixel to point.
  • Get the image paths from a folder.
  • Traverse through the images.
  • Get a specific image and append it to the image collection of the document using Presentation.getImages().append() method.
  • Get the image width and height, and convert them to point.
  • Set the slide size of the presentation based on the image size using Presentation.getSlideSize().setSize() method.
  • Add a slide to the document using Presentation.getSlides().append() method.
  • Set the image as the background image of the slide using the methods under SlideBackground object.
  • Save the document to a PowerPoint file using Presentation.saveToFile() method.
  • Java
import com.spire.presentation.pdf.graphics.PdfGraphicsUnit;
import com.spire.presentation.pdf.graphics.PdfUnitConvertor;
import com.spire.presentation.*;
import com.spire.presentation.drawing.*;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;

public class CustomizeSlideSize {

    public static void main(String[] args) throws Exception {

        //Create a Presentation object
        Presentation presentation = new Presentation();

        //Remove the default slide
        presentation.getSlides().removeAt(0);

        //Get image files from a folder
        File directoryPath = new File("C:\\Users\\Administrator\\Desktop\\Images");
        File[] picFiles  = directoryPath.listFiles();

        //Create a PdfUnitConvertor object
        PdfUnitConvertor convertor = new PdfUnitConvertor();

        //Loop through the images
        for (int i = 0; i < picFiles.length; i++)
        {
            //Get a specific image
            String imageFile = picFiles[i].getAbsolutePath();

            //Append it to the image collection
            BufferedImage bufferedImage =  ImageIO.read(new FileInputStream(imageFile));
            IImageData imageData = presentation.getImages().append(bufferedImage);

            //Get image height and width in pixel
            int height = imageData.getHeight();
            int width = imageData.getWidth();

            //Convert pixel to point
            float widthPoint = convertor.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);
            float heightPoint= convertor.convertUnits(height, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);

            //Set slide size
            presentation.getSlideSize().setSize(new Dimension((int)widthPoint, (int)heightPoint));

            //Add a slide
            ISlide slide = presentation.getSlides().append();

            //Set the image as the background image of the slide
            slide.getSlideBackground().setType(BackgroundType.CUSTOM);
            slide.getSlideBackground().getFill().setFillType(FillFormatType.PICTURE);
            slide.getSlideBackground().getFill().getPictureFill().setFillType(PictureFillType.STRETCH);
            slide.getSlideBackground().getFill().getPictureFill().getPicture().setEmbedImage(imageData);
        }

        //Save to file
        presentation.saveToFile("output/CustomizeSlideSize.pptx", FileFormat.PPTX_2013);
    }
}

Java: Convert Images (PNG, JPG, BMP, etc.) to PowerPoint

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

There are times when you need to create a PowerPoint document from a group of pre-created image files. As an example, you have been provided with some beautiful flyers by your company, and you need to combine them into a single PowerPoint document in order to display each picture in an orderly manner. In this article, you will learn how to convert image files (in any popular image format) to a PowerPoint document in C# and VB.NET using Spire.Presentation for .NET.

Install Spire.Presentation for .NET

To begin with, you need to add the DLL files included in the Spire.Presentation for.NET package as references in your .NET project. The DLL files can be either downloaded from this link or installed via NuGet.

PM> Install-Package Spire.Presentation

Convert Image to Background in PowerPoint in C# and VB.NET

When images are converted as background of each slide in a PowerPoint document, they cannot be moved or scaled. The following are the steps to convert a set of images to a PowerPoint file as background images using Spire.Presentation for .NET.

  • Create a Presentation object.
  • Set the slide size type to Sreen16x9.
  • Get the image paths from a folder and save in a string array.
  • Traverse through the images.
  • Get a specific image and append it to the image collection of the document using Presentation.Images.Append() method.
  • Add a slide to the document using Presentation.Slides.Append() method.
  • Set the image as the background of the slide through the properties under ISlide.SlideBackground object.
  • Save the document to a PowerPoint file using Presentation.SaveToFile() method.
  • C#
  • VB.NET
using Spire.Presentation;
using Spire.Presentation.Drawing;
using System.Drawing;
using System.IO;

namespace ConvertImageToBackground
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a Presentation object
            Presentation presentation = new Presentation();

            //Set slide size type
            presentation.SlideSize.Type = SlideSizeType.Screen16x9;

            //Remove the default slide
            presentation.Slides.RemoveAt(0);

            //Get file paths in a string array
            string[] picFiles = Directory.GetFiles(@"C:\Users\Administrator\Desktop\Images");

            //Loop through the images
            for (int i = 0; i < picFiles.Length; i++)
            {
                //Add a slide
                ISlide slide = presentation.Slides.Append();

                //Get a specific image
                string imageFile = picFiles[i];
                Image image = Image.FromFile(imageFile);

                //Append it to the image collection
                IImageData imageData = presentation.Images.Append(image);

                //Set the image as the background image of the slide
                slide.SlideBackground.Type = BackgroundType.Custom;
                slide.SlideBackground.Fill.FillType = FillFormatType.Picture;
                slide.SlideBackground.Fill.PictureFill.FillType = PictureFillType.Stretch;
                slide.SlideBackground.Fill.PictureFill.Picture.EmbedImage = imageData;
            }

            //Save to file
            presentation.SaveToFile("ImagesToBackground.pptx", FileFormat.Pptx2013);
        }
    }
}

C#/VB.NET: Convert Images (PNG, JPG, BMP, etc.) to PowerPoint

Convert Image to Shape in PowerPoint in C# and VB.NET

If you would like the images are moveable and resizable in the PowerPoint file, you can convert them as shapes. Below are the steps to convert images to shapes in a PowerPoint document using Spire.Presentation for .NET.

  • Create a Presentation object.
  • Set the slide size type to Sreen16x9.
  • Get the image paths from a folder and save in a string array.
  • Traverse through the images.
  • Get a specific image and append it to the image collection of the document using Presentation.Images.Append() method.
  • Add a slide to the document using Presentation.Slides.Append() method.
  • Add a shape with the size equal to the slide using ISlide.Shapes.AppendShape() method.
  • Fill the shape with the image through the properties under IAutoShape.Fill object.
  • Save the document to a PowerPoint file using Presentation.SaveToFile() method.
  • C#
  • VB.NET
using Spire.Presentation;
using Spire.Presentation.Drawing;
using System.Drawing;
using System.IO;

namespace ConvertImageToShape
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a Presentation object
            Presentation presentation = new Presentation();

            //Set slide size type
            presentation.SlideSize.Type = SlideSizeType.Screen16x9;

            //Remove the default slide
            presentation.Slides.RemoveAt(0);

            //Get file paths in a string array
            string[] picFiles = Directory.GetFiles(@"C:\Users\Administrator\Desktop\Images");

            //Loop through the images
            for (int i = 0; i < picFiles.Length; i++)
            {
                //Add a slide
                ISlide slide = presentation.Slides.Append();

                //Get a specific image
                string imageFile = picFiles[i];
                Image image = Image.FromFile(imageFile);

                //Append it to the image collection
                IImageData imageData = presentation.Images.Append(image);

                //Add a shape with a size equal to the slide
                IAutoShape shape = slide.Shapes.AppendShape(ShapeType.Rectangle, new RectangleF(new PointF(0, 0), presentation.SlideSize.Size));

                //Fill the shape with image
                shape.Line.FillType = FillFormatType.None;
                shape.Fill.FillType = FillFormatType.Picture;
                shape.Fill.PictureFill.FillType = PictureFillType.Stretch;
                shape.Fill.PictureFill.Picture.EmbedImage = imageData;
            }

            //Save to file
            presentation.SaveToFile("ImageToShape.pptx", FileFormat.Pptx2013);
        }
    }
}

C#/VB.NET: Convert Images (PNG, JPG, BMP, etc.) to PowerPoint

Convert Image to PowerPoint with Customized Slide Size in C# and VB.NET

If the aspect ratio of your images is not 16:9, or they are not in a standard slide size, you can create slides based on the actual size of the pictures. This will prevent the image from being over stretched or compressed. The following are the steps to convert images to a PowerPoint document with customized slide size using Spire.Presentation for .NET.

  • Create a Presentation object.
  • Create a PdfUnitConvertor object, which is used to convert pixel to point.
  • Get the image paths from a folder and save in a string array.
  • Traverse through the images.
  • Get a specific image and append it to the image collection of the document using Presentation.Images.Append() method.
  • Get the image width and height, and convert them to point.
  • Set the slide size of the presentation based on the image size through Presentation.SlideSize.Size property.
  • Add a slide to the document using Presentation.Slides.Append() method.
  • Set the image as the background image of the slide through the properties under ISlide.SlideBackground object.
  • Save the document to a PowerPoint file using Presentation.SaveToFile() method.
  • C#
  • VB.NET
using Spire.Pdf.Graphics;
using Spire.Presentation;
using Spire.Presentation.Drawing;
using System.Drawing;
using System.IO;

namespace CustomSlideSize
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a Presentation object
            Presentation presentation = new Presentation();

            //Remove the default slide
            presentation.Slides.RemoveAt(0);

            //Get file paths in a string array
            string[] picFiles = Directory.GetFiles(@""C:\Users\Administrator\Desktop\Images"");

            TextBox picBox = new TextBox();

            Graphics g = picBox.CreateGraphics();

            float dpiY = g.DpiY; 

            //Loop through the images 
            for (int i = 0; i < picFiles.Length; i++)
            {
                //Get a specific image 
                string imageFile = picFiles[i];
                Image image = Image.FromFile(imageFile);

                //Append it to the image collection 
                IImageData imageData = presentation.Images.Append(image);

                //Get image height and width in pixel
                int heightpixels = imageData.Height;
                int widthpixels = imageData.Width;

                //Convert pixel to point
                float widthPoint = widthpixels * 72.0f / dpiY;

                float heightPoint = heightpixels * 72.0f / dpiY;

                //Set slide size
                presentation.SlideSize.Size = new SizeF(widthPoint, heightPoint);

                //Add a slide
                ISlide slide = presentation.Slides.Append();

                //Set the image as the background image of the slide
                slide.SlideBackground.Type = BackgroundType.Custom;
                slide.SlideBackground.Fill.FillType = FillFormatType.Picture;
                slide.SlideBackground.Fill.PictureFill.FillType = PictureFillType.Stretch;
                slide.SlideBackground.Fill.PictureFill.Picture.EmbedImage = imageData;
            }

            //Save to file
            presentation.SaveToFile(""CustomizeSlideSize.pptx"", FileFormat.Pptx2013);
        }
    }
}

C#/VB.NET: Convert Images (PNG, JPG, BMP, etc.) to PowerPoint

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.

PDF documents can be secured in several ways. When PDFs are protected with a permission password, readers can open the document without needing to enter a password, but they may not have permission to further manipulate the document, such as printing or copying the content. In this article, you will learn how to set security permissions for a PDF document in Java using Spire.PDF for Java library.

Install Spire.PDF for Java

First, you're required to add the Spire.Pdf.jar file as a dependency in your Java program. The JAR file can be downloaded from this link. If you use Maven, you can easily import the JAR file in your application by adding the following code to your project's pom.xml file.

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf</artifactId>
        <version>11.12.16</version>
    </dependency>
</dependencies>

Add Security Permissions to a PDF Document in Java

Below are the steps to apply security permissions to a PDF document using Spire.PDF for Java.

  • Create a PdfDocument object.
  • Load a sample PDF file using PdfDocument.loadFileFile() method.
  • Specify open password and permission password. The open password can be set to empty so that the generated document will not require a password to open.
  • Encrypt the document with the open password and permission password, and set the security permissions using PdfDocument.getSecurity().encypt() method. This method takes PdfPermissionsFlags enumeration as a parameter, which defines user access permissions for an encrypted document.
  • Save the document to another PDF file using PdfDocument.saveToFile() method.
  • Java
"//Create a PdfDocument object
        PdfDocument pdf= new PdfDocument();

        //Load a sample PDF file
        pdf.loadFromFile("C:\\Users\\Administrator\\Desktop\\sample.pdf");
        String output = "output/changeSecurityPermission_output.pdf";

        // Create a PdfSecurityPolicy with the specified user password and owner password
        PdfSecurityPolicy securityPolicy = new PdfPasswordSecurityPolicy("userpassword", "ownerpassword");

        // Create a PdfDocumentPrivilege with desired permissions (e.g., allow filling form fields)
        PdfDocumentPrivilege privilege = new PdfDocumentPrivilege();
        privilege.setAllowFillFormFields(true);
        privilege.setAllowPrint(true);

        // Encrypt the PDF document using the specified security policy
        pdf.encrypt(securityPolicy);

        // Save the encrypted PDF document to the output file path
        pdf.saveToFile(output, FileFormat.PDF);

        // Close the PDF document to release resources
        pdf.close();

        // Dispose of the PDF document to free up system resources
        pdf.dispose();"

Java: Add Security Permissions to a PDF Document

Apply for a Temporary License

If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.