pdflib使用:pdf的分割与合并

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"));//宽度595
					auto fHeight = m_oPDF.pcos_get_number(nSrcPDFID, L"pages[0]/height");//高度842
					int 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"));//宽度595
					auto fHeight = m_oPDF.pcos_get_number(nSrcPDFID, L"pages[0]/height");//高度842
					int 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());
			}
		}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值