Examples / split_pdf / c

Split Pdf

A complete, runnable c program — 48 lines, shipped in your download.

Demonstrates Import & Output APIs

Same example, other languages: activex_cpp cpp cpp_linux csharp php python vbnet

examples/c/split_pdf/split_pdf.c 48 lines
/* split_pdf -- C port of examples\Vb6\split_pdf
   Opens one import file, keeps it open across CloseFile() via
   SetUseGlobalImpFiles, and writes each page into its own PDF. */
#include <direct.h>
#include <stdio.h>
#include "lumaspdf.h"

static SI32 PDF_CALL PDFError(void* Data, SI32 ErrCode, const char* ErrMessage, SI32 ErrType) {
    (void)Data; (void)ErrCode; (void)ErrType;
    if (ErrMessage) printf("%s\n", ErrMessage);
    return 0;
}

int main(void) {
    PPDF pdf = pdfNewPDF();
    SI32 i, count;
    char outPath[512];

    pdfSetOnErrorProc(pdf, 0, PDFError);

    pdfSetImportFlags(pdf, ifImportAll | ifImportAsPage);
    pdfSetImportFlags2(pdf, if2UseProxy);

    if (pdfOpenImportFileA(pdf, "license.pdf", ptOpen, "") < 0) {
        pdfDeletePDF(pdf); return 1;
    }

    pdfSetUseGlobalImpFiles(pdf, 1);

    _mkdir("out");

    count = pdfGetInPageCount(pdf);
    for (i = 1; i <= count; i++) {
        sprintf(outPath, "out\\page%04d.pdf", i);
        pdfCreateNewPDFA(pdf, outPath);
            pdfAppend(pdf);
                pdfImportPageEx(pdf, i, 1.0, 1.0);
            pdfEndPage(pdf);
        pdfCloseFile(pdf);
    }

    pdfSetUseGlobalImpFiles(pdf, 0);

    printf("Pages written to: out\n");
    pdfDeletePDF(pdf);
    return 0;
}

This file is in the SDK at examples/c/split_pdf/split_pdf.c. The build fails if this page and that file ever differ.