拆分 PDF 的关键函数是 PDFDoc::StartImportPages。

  common::Progressive StartImportPages(int dest_index, const PDFDoc& src_doc,
uint32 flags = PDFDoc::e_ImportFlagNormal, const char* layer_name = "",
const common::Range& page_range = common::Range(),
common::PauseCallback* pause = NULL);

这个函数可以将一个 PDF 中的某几页插入到另一个 PDF 中。如果另一个 PDF 是个新建的空 PDF,那就实现了拆分 PDF 的目的。

示例主要代码:

#include <iostream>
#include <pdf/fs_pdfdoc.h>
#include "SdkLibMgr.h"
using namespace std;
using namespace foxit;
using namespace foxit::pdf;
using namespace foxit::common;
int main()
{
SdkLibMgr sdk_lib_mgr;
// Initialize library
ErrorCode error_code = sdk_lib_mgr.Initialize();
if (error_code != foxit::e_ErrSuccess) {
return 1;
}
try
{
const wchar_t* input_file = LR"(d:\Temp\test.pdf)";
PDFDoc doc = PDFDoc(input_file);
error_code = doc.Load();
if (error_code != foxit::e_ErrSuccess)
{
cerr << error_code << endl;
}
for (int i = 0; i < doc.GetPageCount(); ++i)
{
PDFDoc page;
Progressive progressive = page.StartImportPages(0, doc, 0, "", Range(i));
while (progressive.Continue() != Progressive::e_Finished)
;
char buffer[256] = { 0 };
sprintf_s(buffer, "../output_files/split_%d.pdf", i + 1);
page.SaveAs(buffer);
}
}
catch (const Exception &e)
{
cout << e.GetMessage() << endl;
}
return 0;
}

SdkLibMgr 参考官方例子。

发表回复

您的电子邮箱地址不会被公开。