借助互聯網的力量,一切都已經數字化,無紙化系統也變得流行起來。數字文檔,即 PDF,是無紙化系統的組成部分之一,通過提供自動生成和處理功能使生活變得更加輕鬆。大多數企業使用 PDF 文檔自動化來動態生成報告、收據、發票和其他業務文檔。因此,在本文中,我將演示如何在基於 C++ 的應用程序中集成 PDF 自動化功能,並使用 C++ 生成 PDF 文件。

C++ PDF 庫

為了創建 PDF 文件,我們將使用 Aspose.PDF for C++ API,它是一個本地 C++ 庫,以編程方式處理 PDF 文檔。它允許您在各種 PDF 元素的支持下創建交互式 PDF 文檔。 Aspose.PDF for C++ 可在 NuGet 以及 Aspose 的 下載 部分中獲得。

在 C++ 中創建 PDF 文件

首先,我們將創建一個簡單的 PDF 文件,並以段落的形式在第一頁添加一些文本。以下是要遵循的步驟:

  • 創建一個 Document 對象。
  • 將頁面添加到文檔的 PageCollection
  • 獲取頁面的段落。
  • 創建一個 TextFragment 對象並將其添加到段落中。
  • 保存 PDF 文檔。

以下代碼示例顯示瞭如何在 C++ 中創建 PDF 文檔。

// 創建文檔
auto doc = MakeObject<Document>();
auto pages = doc->get_Pages();
pages->Add();
// 頁數從1開始
auto page = pages->idx_get(1);
auto paragraps = page->get_Paragraphs();	
// 創建文本片段
auto text = MakeObject<TextFragment>(u"PDF API for C++");
auto ts = text->get_TextState();
// 設置文本狀態
ts->set_FontSize(16);
ts->set_FontStyle(FontStyles::Italic);
// 添加到段落
paragraps->Add(text);
// 向段落添加文本
paragraps->Add(MakeObject<TextFragment>(u"This example shows how to create a PDF with text using Aspose.PDF for C++."));
// 保存PDF文件
doc->Save(u"Example1.pdf");

輸出

在 C++ 中創建 PDF 文件

在 C++ 中使用 TextBuilder 創建 PDF 文件

在本節中,我將向您展示如何使用 TextBuilder 類在頁面上附加各種文本片段和段落。此外,在此示例中,您將學習如何設置文本片段在頁面上的位置。以下是執行此操作的步驟:

  • 創建文檔對象。
  • 向文檔添加頁面。
  • 創建一個 TextBuilder 對象。
  • 創建一個 TextFragment 並添加其文本。
  • 設置 TextFragment 的位置。
  • 使用 TextBuilder 追加 TextFragment。
  • 保存 PDF 文檔。

以下代碼示例顯示瞭如何在 C++ 中使用 TextBuilder 創建 PDF。

// 創建文檔對象
auto doc = MakeObject<Document>();
auto pages = doc->get_Pages();
pages->Add();
// 創建文本生成器
auto tb = MakeObject<TextBuilder>(pages->idx_get(1));
// 創建文本片段
auto text = MakeObject<TextFragment>(u"Hello world!");
text->set_Position(MakeObject<Position>(100, 800));
// 追加 TextFragment
tb->AppendText(text);
// 創建另一個 TextFragment
text = MakeObject<TextFragment>(u"This example is created by Aspose.Pdf for C++.");
text->set_Position(MakeObject<Position>(150, 750));
tb->AppendText(text);
// 創建另一個 TextFragment
text = MakeObject<TextFragment>(u"It demonstrates how to use TextBuilder to append text into PDF file.");
text->set_Position(MakeObject<Position>(200, 700));
tb->AppendText(text);
// 創建文本段落
auto par = MakeObject<TextParagraph>();
par->set_Position(MakeObject<Position>(250,650));
par->AppendLine(u"New paragraph");
par->AppendLine(u"Line 2");
par->AppendLine(u"Line 3");
tb->AppendParagraph(par);
// 保存 PDF 文檔
doc->Save(u"Created PDF.pdf");

輸出

C++ PDF API

在 C++ 中創建帶有圖像的 PDF 文件

您還可以使用 Aspose.PDF for C++ 創建圖像並將圖像添加到 PDF 文檔。以下是執行此操作的步驟:

  • 創建文檔對象。
  • 向文檔添加頁面。
  • 創建要添加的圖像。
  • 將圖像添加到 PDF 文件。
  • 保存 PDF 文件。

以下代碼示例顯示瞭如何使用 C++ 創建圖像並將圖像添加到 PDF 文檔。

// 創建文檔對象
auto doc = MakeObject<Document>();
auto pages = doc->get_Pages();
pages->Add();
auto page = pages->idx_get(1);
// 創建圖像
auto stream = MakeObject<IO::MemoryStream>();
SharedPtr<Bitmap> bitmap = MakeObject<Bitmap>(200, 200);
SharedPtr<Graphics> graphics = Graphics::FromImage(bitmap);
graphics->Clear(System::Drawing::Color::get_Yellow());
graphics->FillRectangle(Brushes::get_Blue(), System::Drawing::Rectangle(0, 0, 200, 100));
bitmap->Save(stream, Imaging::ImageFormat::get_Bmp());
// 創建矩形
double x = 100.0, y = 600.0, width = 200.0, height = 200.0;
auto rect = MakeObject<Aspose::Pdf::Rectangle>(x, y, x + width, y + height);
// 將圖像添加到 PDF
stream->Seek(0, System::IO::SeekOrigin::Begin);
page->AddImage(stream, rect);
// 保存 PDF 文檔
doc->Save(u"Created PDF.pdf");

輸出

C++ PDF 庫

在 C++ 中創建帶附件的 PDF 文件

PDF 格式還允許向文檔添加附件。有多種文件格式可以作為附件添加到 PDF 文件。以下是使用 Aspose.PDF for C++ 將文件嵌入 PDF 的步驟:

  • 在 SharedPtr 中加載要附加的文件.
  • 創建文檔類的對象。
  • 將文件嵌入到文檔中。
  • 保存 PDF 文件。

以下代碼示例顯示瞭如何使用 C++ 將附件添加到 PDF 文檔。

// 創建一個文本文件
System::IO::File::WriteAllText(u"Attachment.txt", u"Some info");
SharedPtr<FileSpecification> fileSpecification = MakeObject<FileSpecification>(u"Attachment.txt", u"Sample text file");
// 將附件添加到文檔的附件集合
auto doc = MakeObject<Document>();
doc->get_EmbeddedFiles()->Add(fileSpecification);
// 向 PDF 添加頁面
doc->get_Pages()->Add();	 
// 保存 PDF 文檔
doc->Save(u"Created PDF.pdf");

輸出

在 C++ 中生成 PDF

了解有關 Aspose.PDF for C++ 的更多信息

您可以從 文檔 和源代碼 示例 中了解有關 Aspose.PDF for C++ 的更多信息。

也可以看看