Legacy notice!

iText 5 is the previous major version of iText’s leading PDF SDK. iText 5 is EOL, and is no longer developed, although we still provide support and security fixes. Switch your project to iText 8, our latest version which supports the latest PDF standards and technologies.
Check related iText 8 content!

I want to set the properties available under the Initial View tab in Adobe Acrobat for an existing PDF programmatically.

Document Options:

  • Show = Bookmarks Panel and Page
  • Page Layout = Continuous
  • Magnification = Fit Width
  • Open to Page number = 1

Window Options:

  • Show = Document Title

I tried to achieve this using the following code:

PdfStamper stamper =
    new PdfStamper(reader, new FileStream(dPDFFile, FileMode.Create));
stamper.AddViewerPreference(PdfName.DISPLAYDOCTITLE, new PdfBoolean(true));
the above code is used to set the document title show, but the following code is not working:

// For page layout
stamper.AddViewerPreference(PdfName.PAGELAYOUT, new PdfName("OneColumn"));
// For Bookmarks Panel and Page:
stamper.AddViewerPreference(PdfName. PageMode, new PdfName("UseOutlines"));
Finally I also want to set the language to English. The PS Script to do this looks like this [ {Catalog} > /PUT pdfmark. How is it done in PDF?

Posted on StackOverflow on Jun 23, 2014 by Thirusanguraja Venkatesan

When you have a PdfWriter instance named writer, you can set the Viewer preferences like this:

writer.ViewerPreferences = viewerpreference;

In this case, the viewerpreference is a value that can have one of the following values:

  • PdfWriter.PageLayoutSinglePage

  • PdfWriter.PageLayoutOneColumn

  • PdfWriter.PageLayoutTwoColumnLeft

  • PdfWriter.PageLayoutTwoColumnRight

  • PdfWriter.PageLayoutTwoPageLeft

  • PdfWriter.PageLayoutTwoPageRight

See the PageLayoutExample for more info.

You can also change the page mode as is shown in the ViewerPreferencesExample. In which case the different values are "OR"-ed:

  • PdfWriter.PageModeFullScreen

  • PdfWriter.PageModeUseThumbs

  • PdfWriter.PageLayoutTwoColumnRight | PdfWriter.PageModeUseThumbs

  • PdfWriter.PageModeFullScreen | PdfWriter.NonFullScreenPageModeUseOutlines

  • PdfWriter.FitWindow | PdfWriter.HideToolbar

  • PdfWriter.HideWindowUI

Currently, you've only used the PrintPreferences example from the official documentation:

writer.AddViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);
writer.AddViewerPreference(PdfName.NUMCOPIES, new PdfNumber(3));
writer.AddViewerPreference(PdfName.PICKTRAYBYPDFSIZE, PdfBoolean.PDFTRUE);

But in some cases, it's just easier to use:

writer.ViewerPreferences = viewerpreference;

As for setting the language, this is done like this:

stamper.Writer.ExtraCatalog.Put(PdfName.LANG, new PdfString("EN"));

The result is shown in the following screen shot:

RUPS: looking at the internal structure of a PDF

As you can see, there is now a Lang entry with value EN added to the catalog.

Taken from the additional answer by Chris Haas:

The items Magnification = Fit Width and Open to Page number = 1 are also part of the /Catalog but in a special key called /OpenAction. You can set this using Writer.SetOpenAction().

In your case you're looking for:

//Create a destination that fit's width (fit horizontal)
var D = new PdfDestination(PdfDestination.FITH);
//Create an open action that points to a specific page using this destination
var OA = PdfAction.GotoLocalPage(1, D, stamper.Writer);
//Set the open action on the writer
stamper.Writer.SetOpenAction(OA);