用福昕SDK拆分PDF
拆分 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 参考官方例子。