拆分 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 参考官方例子。

发表回复

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