pdflib使用:pdf的分割与合并

发布时间:2025-12-09 20:43:38 浏览次数:5

DFLib是用于创建PDF文档的开发库,提供了简单易用的API,隐藏了创建PDF的复杂细节且不需要第3方软件的支持。PDFLib库对于个人是免费的,对于商业产品需要购买许可。

PDFlib [1]  是一个帮助您生成符合 Adobe 的可移植文档格式 (PDF) 文件的中间件。 PDFlib 充当用户自己程序的后端。当应用程序员负责抽取要处理的数据时,PDFlib承担生成 PDF 输出(图解数据)的任务。PDFlib 让您无需再关注 PDF 的内部细节问题,并提供了各种方法来帮助您设置输出的格式。发布软件包在同一个二进制文件中包含了不同的产品:

> PDFlib 包含创建 PDF 输出(包括文本、矢量图形和图像以及超文本元素)所必需的所有函数。 PDFlib 为放置单行或多行文本、图像和创建表提供了强大的格式化功能。

> PDFlib+PDI 包括所有 PDFlib 函数,以及用于在输出的文件中嵌入现有的 PDF 文档页PDF 输入库 (PDI),及用于查询导入文档中任意 PDF 对象(例如列出页面上的所有字体、查询元数据等等)的 pCOS 接口。

> PDFlib Personalization Server (PPS) 包括 PDFlib+PDI 以及用于自动填充 PDFlib 块的附加函数。块是页上的占位矩形,可以用文本、图像或 PDF 页进行填充。可以使用适用于Adobe Acrobat (Mac 或 Windows)的 PDFlib 块插件交互式创建块,并使用 PPS 自动进行填充。该插件包含在 PPS 中。

1.获取文件夹中所有的pdf文件路径

从文件夹中遍历pdf文件,后续的处理流程可写在遍历循环中。

CFileFind ff;strMusicFolder += _T("\\");strMusicFolder += _T("*.pdf");BOOL res = ff.FindFile(strMusicFolder);while (res){res = ff.FindNextFile();if (!ff.IsDirectory() && !ff.IsDots()){AfxMessageBox(ff.GetFilePath());}}ff.Close();

2.创建目标pdf文件

分割与合并结果的输出pdf文档。

compatibility=1.7版本号

CString dst;PDFlib m_oPDF;dst = src + _T("\\Dst.pdf");if (m_oPDF.begin_document(dst.GetString(), L"compatibility=1.7") == -1){AfxMessageBox(L"创建pdf文件失败!");return false;}

3.循环导入待操作pdf

依次读入待操作的pdf,分割写入操作完成后关闭操作pdf。

int pdfdeletesheet;//保留的pdf抬头页数int nSrcPDFID;while (res){res = ff.FindNextFile();if (!ff.IsDirectory() && !ff.IsDots()){CString show = ff.GetFilePath().GetString();if (show == dst){continue;}count++;if (count == 1){nSrcPDFID = m_oPDF.open_pdi_document(ff.GetFilePath().GetString(), L"");if (nSrcPDFID == -1){AfxMessageBox(L"打开源pdf文件失败!");return false;}int endpage = (int)m_oPDF.pcos_get_number(nSrcPDFID, L"length:pages");//总页数auto fWidth = (m_oPDF.pcos_get_number(nSrcPDFID, L"pages[0]/width"));//宽度595auto fHeight = m_oPDF.pcos_get_number(nSrcPDFID, L"pages[0]/height");//高度842int nFontId = m_oPDF.load_font(L"微软雅黑", L"host", L"");if (nFontId == -1){printf(u8"##PdfAddWaterMarker, 默认字体(微软雅黑)加载失败!");return false;}for (int pageno = 1; pageno <= endpage; pageno++){//获取准备绘制的页面标识int page = m_oPDF.open_pdi_page(nSrcPDFID, pageno, L"");if (page == -1){return false;}//向文档添加新页,并指定各种选项 L""m_oPDF.begin_page_ext(fWidth, fHeight, L"");m_oPDF.setfont(nFontId, 18);//在页面上放置导入的PDF页面,并根据不同的选项进行操作。m_oPDF.fit_pdi_page(page, 0, 0, L"adjustpage");m_oPDF.end_page_ext(L"");m_oPDF.close_pdi_page(page);}m_oPDF.close_pdi_document(nSrcPDFID);}else{nSrcPDFID = m_oPDF.open_pdi_document(ff.GetFilePath().GetString(), L"");if (nSrcPDFID == -1){//printf(u8"##打开源pdf文件失败!");AfxMessageBox(L"打开源pdf文件失败!");return false;}int endpage = (int)m_oPDF.pcos_get_number(nSrcPDFID, L"length:pages");//总页数auto fWidth = (m_oPDF.pcos_get_number(nSrcPDFID, L"pages[0]/width"));//宽度595auto fHeight = m_oPDF.pcos_get_number(nSrcPDFID, L"pages[0]/height");//高度842int nFontId = m_oPDF.load_font(L"微软雅黑", L"host", L"");if (nFontId == -1){printf(u8"##PdfAddWaterMarker, 默认字体(微软雅黑)加载失败!");return false;}for (int pageno = 1+pdfdeletesheet; pageno <= endpage; pageno++){//获取准备绘制的页面标识int page = m_oPDF.open_pdi_page(nSrcPDFID, pageno, L"");if (page == -1){return false;}//向文档添加新页,并指定各种选项 L""m_oPDF.begin_page_ext(fWidth, fHeight, L"");m_oPDF.setfont(nFontId, 18);//在页面上放置导入的PDF页面,并根据不同的选项进行操作。m_oPDF.fit_pdi_page(page, 0, 0, L"adjustpage");m_oPDF.end_page_ext(L"");m_oPDF.close_pdi_page(page);}m_oPDF.close_pdi_document(nSrcPDFID);}//AfxMessageBox(ff.GetFilePath());}}
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477