将文档作为附件添加到 pdf 为您带来了很多便利。例如,您可以将多个文档作为单个文档传输;您可以在 pdf 文档中打开另一个文件,而无需从其他位置查找该文档;您可以降低丢失 pdf 中引用文档的可能性。
spire.pdf for c 允许您以两种方式附加文件:
- 文档级附件(或常规附件):文档级附件是指添加到“附件”选项卡中的附件,在特定页面上找不到该附件。
- 注释附件:注释附件是指添加到页面特定位置的附件。注释附件在页面上显示为回形针图标;审阅者可以双击图标打开文件。
本文将向您展示如何使用 spire.pdf for c 在 c 中添加或删除 pdf 文档中的常规附件和注释附件。
安装 spire.pdf for c
有两种方法可以将 spire.pdf for c 集成到您的应用程序中。一种方法是通过安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 nuget 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 spire. pdf for c 集成到 c 程序中
向 pdf 添加常规附件
要添加常规附件,可以使用 pdfdocument->getattachments()->add() 方法。以下是详细步骤。
- 创建一个 pdfdocument 对象。
- 使用 pdfdocument->loadfromfile() 方法加载 pdf 文档。
- 基于外部文件创建 pdfattachment 对象。
- 使用 pdfdocument->getattachments()->add() 方法将附件添加到 pdf。
- 使用 pdfdocument.savetofile() 方法将文档保存到另一个 pdf 文件。
- c
#include "spire.pdf.o.h";
using namespace spire::pdf;
using namespace std;
int main() {
//指定输入文件路径
wstring inputpdfpath = l"c:\\users\\administrator\\desktop\\ai创意赛.pdf";
wstring inputfilepath = l"c:\\users\\administrator\\desktop\\参赛人员名单.xlsx";
//指定输出文件路径
wstring outputfilepath = l"output\\添加附件.pdf";
//创建pdfdocument对象
pdfdocument* doc = new pdfdocument();
//加载示例pdf文件
doc->loadfromfile(inputpdfpath.c_str());
//基于外部文件创建pdfattachment对象
pdfattachment* attachment = new pdfattachment(inputfilepath.c_str());
//将附件添加到pdf
doc->getattachments()->add(attachment);
//保存到文件
doc->savetofile(outputfilepath.c_str());
delete doc;
}
向 pdf 添加注释附件
注释附件由 pdfattachmentannotation 类表示。您需要基于外部文件创建该类的实例,然后使用 pdfpagebase->getannotationswidget()->add() 方法将其添加到特定页面。以下是详细步骤。
- 创建一个 pdfdocument 对象。
- 使用 pdfdocument->loadfromfile() 方法加载 pdf 文档。
- 使用 pdfdocument->getpages()->getitem() 方法获取特定页面以添加注释。
- 基于外部文件创建 pdfattachmentannotation 对象。
- 使用 pdfpagebase->getannotationswidget->add() 方法将注释附件添加到页面。
- 使用 pdfdocument->savetofile() 方法保存文档。
- c
#include "spire.pdf.o.h";
using namespace spire::pdf;
using namespace std;
int main() {
//指定输入文件路径
wstring inputpdfpath = l"ai创意赛.pdf";
wstring inputfilepath = l"赛制规则及流程安排.docx";
//指定输出文件路径
wstring outputfilepath = l"output\\添加注释附件.pdf";
//创建pdfdocument对象
pdfdocument* doc = new pdfdocument();
//加载示例pdf文件
doc->loadfromfile(inputpdfpath.c_str());
//获取特定页面
pdfpagebase* page = doc->getpages()->getitem(0);
//在pdf上绘制标签
wstring label = l"现场相关事宜安排见附件:";
pdftruetypefont* font = new pdftruetypefont(l"宋体", 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);
//转换要附加到流的文件
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::common::stream((unsigned char*)buffer1, length1);
sizef* size = font->measurestring(label.c_str());
rectanglef* bounds = new rectanglef((float)(x size->getwidth() 5), (float)y, 10, 15);
//基于文件创建pdfattachmentannotation对象
pdfattachmentannotation* annotation = new pdfattachmentannotation(bounds, l"赛制规则及流程安排.docx", stream);
annotation->setcolor(new pdfrgbcolor(spire::common::color::getdarkorange()));
annotation->setflags(pdfannotationflags::readonly);
annotation->seticon(pdfattachmenticon::graph);
annotation->settext(l"单击此处打开文件");
//将附件注释添加到pdf
page->getannotationswidget()->add(annotation);
//保存文件
doc->savetofile(outputfilepath.c_str());
delete doc;
}
删除 pdf 中的常规附件
spire.pdf for c 提供 pdfdocument->getattachments() 方法用于返回 pdf 文档的常规附件集合。然后您可以使用 pdfattachmentcollection->removeat() 方法或 pdfattachmentcollection->clear() 方法删除特定附件或所有附件。详细步骤如下。
- 创建一个 pdfdocument 对象。
- 使用 pdfdocument->loadfromfile() 方法加载 pdf 文档。
- 使用 pdfdocument->getattachments() 方法从文档中获取附件集合。
- 使用 pdfattachmentcollection->removeat() 方法删除特定附件。 要一次删除所有附件,请使用 pdfattachmentcollection->clear() 方法。
- 使用 pdfdocument->savetofile() 方法保存文档。
- c
#include "spire.pdf.o.h";
using namespace spire::pdf;
using namespace std;
int main() {
//指定输入文件路径
wstring inputpdfpath = l"c:\\users\\administrator\\desktop\\示例文档.pdf";
//指定输出文件路径
wstring outputfilepath = l"output\\删除附件.pdf";
//创建pdfdocument对象
pdfdocument* doc = new pdfdocument();
//加载pdf文件
doc->loadfromfile(inputpdfpath.c_str());
//获取所有附件
pdfattachmentcollection* attachments = doc->getattachments();
//删除所有附件
attachments->clear();
//删除指定附件
//attachments->removeat(0);
//保存文件
doc->savetofile(outputfilepath.c_str());
doc->close();
delete doc;
}
删除 pdf 中的注释附件
注释是基于页面的元素。 您可以使用 pdfpagebase->getannotationswidget() 方法从特定页面获取注释,并确定某个注释是否为注释附件。之后,使用 pdfannotationcollection->remove() 方法从注释集合中删除注释附件。 以下是详细步骤。
- 创建一个 pdfdocument 对象。
- 使用 pdfdocument->loadfromfile() 方法加载 pdf 文档。
- 使用 pdfpagebase->getannotationswidget() 方法从特定页面获取注释集合。
- 确定注释是否为 pdfattachmentannotationwidget 的实例。如果是,请使用 pdfannotationcollection->remove() 方法删除注释附件。
- 使用 pdfdocument->savetofile() 方法保存文档。
- c
#include "spire.pdf.o.h";
using namespace spire::pdf;
using namespace std;
int main() {
//指定输入文件路径
wstring inputpdfpath = l"c:\\users\\administrator\\desktop\\示例文档.pdf";
//指定输出文件路径
wstring outputfilepath = l"output\\删除附件.pdf";
//创建pdfdocument对象
pdfdocument* doc = new pdfdocument();
//加载pdf文件
doc->loadfromfile(inputpdfpath.c_str());
//获取所有附件
pdfattachmentcollection* attachments = doc->getattachments();
//删除所有附件
attachments->clear();
//删除指定附件
//attachments->removeat(0);
//保存文件
doc->savetofile(outputfilepath.c_str());
doc->close();
delete doc;
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。