随着互联网的力量,一切都变成了数字化,无纸化系统变得流行起来。数字文档(即 PDF)是无纸化系统的组成部分之一,通过提供自动生成和处理功能使生活变得更轻松。大多数企业使用 PDF 文档自动化来动态生成报告、收据、发票和其他业务文档。因此,在本文中,我将演示如何将 PDF 自动化功能集成到基于 C++ 的应用程序中,并使用 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));
// 附加文本片段
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 中的文件.
  • 创建 Document 类的对象。
  • 将文件嵌入到文档中。
  • 保存 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++ 的信息。

也可以看看