Add page numbers to PDF in C++

Add a page-number stamp to the first PDF page or use Roman-number stamps on all pages with Aspose.PDF for C++.

Number the first page

Only the first page is stamped. The total page count is inserted into the format string.

  1. Open the input PDF as a Document.
  2. Create a PageNumberStamp and set Format using # as the current-page placeholder.
  3. Set bottom margin, alignment, and StartingNumber to 1.
  4. Configure the text state with Arial from FontRepository.
  5. Call AddStamp() on page 1.
  6. Save the result with Save().

#include <Aspose.PDF.Cpp/Text/TextState.h>
#include <Aspose.PDF.Cpp/Text/Font.h>
#include <Aspose.PDF.Cpp/Color.h>
#include <Aspose.PDF.Cpp/Document.h>
#include <Aspose.PDF.Cpp/Text/FontRepository.h>
#include <Aspose.PDF.Cpp/Text/FontStyles.h>
#include <Aspose.PDF.Cpp/HorizontalAlignment.h>
#include <Aspose.PDF.Cpp/Page.h>
#include <Aspose.PDF.Cpp/PageCollection.h>
#include <Aspose.PDF.Cpp/PageNumberStamp.h>

using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;

// Port of StampingExamples.addPageNumStamp.
void AddPageNumStamp(System::String inputFile, System::String outputFile)
{
    auto document = MakeObject<Document>(inputFile);

    auto pageNumberStamp = MakeObject<PageNumberStamp>();
    pageNumberStamp->set_Background(false);
    pageNumberStamp->set_Format(String::Format(u"Page # of {0}", document->get_Pages()->get_Count()));
    pageNumberStamp->set_BottomMargin(10);
    pageNumberStamp->set_HorizontalAlignment(HorizontalAlignment::Center);
    pageNumberStamp->set_StartingNumber(1);
    pageNumberStamp->get_TextState()->set_Font(FontRepository::FindFont(u"Arial"));
    pageNumberStamp->get_TextState()->set_FontSize(14.0f);
    pageNumberStamp->get_TextState()->set_FontStyle(FontStyles::Bold | FontStyles::Italic);
    pageNumberStamp->get_TextState()->set_ForegroundColor(Color::get_BlueViolet());

    document->get_Pages()->idx_get(1)->AddStamp(pageNumberStamp);
    document->Save(outputFile);
}

Number all pages using Roman numerals

  1. Open the input PDF as a Document.
  2. Create a PageNumberStamp with StartingNumber set to 42.
  3. Set NumberingStyle to NumeralsRomanUppercase.
  4. Configure alignment, margin, and text state.
  5. Call AddStamp() for every Page.
  6. Save the result with Save().

#include <Aspose.PDF.Cpp/Text/TextState.h>
#include <Aspose.PDF.Cpp/Text/Font.h>
#include <Aspose.PDF.Cpp/Color.h>
#include <Aspose.PDF.Cpp/Document.h>
#include <Aspose.PDF.Cpp/Text/FontRepository.h>
#include <Aspose.PDF.Cpp/Text/FontStyles.h>
#include <Aspose.PDF.Cpp/HorizontalAlignment.h>
#include <Aspose.PDF.Cpp/NumberingStyle.h>
#include <Aspose.PDF.Cpp/Page.h>
#include <Aspose.PDF.Cpp/PageCollection.h>
#include <Aspose.PDF.Cpp/PageNumberStamp.h>

using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;

// Port of StampingExamples.addPageNumStampRoman.
void AddPageNumStampRoman(System::String inputFile, System::String outputFile)
{
    auto document = MakeObject<Document>(inputFile);

    auto pageNumberStamp = MakeObject<PageNumberStamp>();
    pageNumberStamp->set_Background(false);
    pageNumberStamp->set_BottomMargin(10);
    pageNumberStamp->set_HorizontalAlignment(HorizontalAlignment::Center);
    pageNumberStamp->set_StartingNumber(42);
    pageNumberStamp->set_NumberingStyle(NumberingStyle::NumeralsRomanUppercase);
    pageNumberStamp->get_TextState()->set_Font(FontRepository::FindFont(u"Arial"));
    pageNumberStamp->get_TextState()->set_FontSize(14.0f);
    pageNumberStamp->get_TextState()->set_FontStyle(FontStyles::Bold);
    pageNumberStamp->get_TextState()->set_ForegroundColor(Color::get_BlueViolet());

    for (const auto& page : document->get_Pages()) {
        page->AddStamp(pageNumberStamp);
    }
    document->Save(outputFile);
}