pdfTeX
The pages are stored in a page structure, a balanced tree. The top node contains an integer with the number of pages. The maximal integer number in PDF and TeX is 231−1 (2,147,483,647). However indirect objects are needed to store
pages in the PDF format (PDF specification):
- 1 Page node per page;
- 1 Resources object per page (pdfTeX generates the object for each page, even
if the resource objects are the same and could be shared);
- 1 Contents object per page (in theory equal pages could share the same object, but it is not supported by pdfTeX and unlikely for real documents).
- Overhead of the page tree structure with additional kid nodes;
- And the document has a few additional objects (e.g. Catalog, Info).
Thus more than 3 indirect objects are needed per page. But the number of indirect objects (indirect objects are PDF objects that can be referenced by the object number and are recorded in the cross reference section) is limited:
223−1 (8,388,607).
The following test file explores the maximal number of pages with pdfTeX.
It does only generates minimal pages without fonts, annotations.
The pages are completely empty (\shipout\hbox{}
).
% pdftex --ini test.tex
\catcode`\{=1
\catcode`\}=2
\pdfoutput=1
\iffalse
\pdfobjcompresslevel=2
\pdfcompresslevel=9
\else
\pdfobjcompresslevel=0
\pdfcompresslevel=0
\fi
\pdfminorversion=5
\countdef\pageno=0
\chardef\one=1
\countdef\max=255
\max=2621437
\def\x{%
\advance\pageno\one
\shipout\hbox{}%
\ifnum\max=\pageno
\let\x\relax
\fi
\x
}
\x
\end
Tested with pdfTeX 3.1415925-2.4-1.40.13 (TeX Live 2012).
Result:
Pages: 2,621,437
File size: 862,082,448 bytes
PDF without object stream compression
If the page number is increased by one, then pdfTeX complains with an error message:
! TeX capacity exceeded, sorry [indirect objects table size=8388607].
PDF object stream compression of PDF-1.5 decreases the file size, but
costs indirect objects for storing the object streams. That decreases the maximal number of pages. For testing, replace \iffalse
by \iftrue
in the example above and play with the setting for \max
. Result:
Pages: 2,603,538
File size: 329,412,496
PDF with object stream compression
In practice especially annotations costs objects (and therefore pages), whereas fonts can be reused throughout the document.
Summary
The theoretical maximal number of pages for PDF files with pdfTeX is 2,621,437 (empty pages and without object stream compression of PDF-1.5).
LuaTeX 0.95.0
LuaTeX derived from pdfTeX, thus the empty page uses the same number of objects as in the case of pdfTeX. The page tree is stored with less number of objects, because pdfTeX uses 6 kids in a page tree node, but LuaTeX has increased the number to 10 kids per page tree node.
Therefore, LuaTeX can create a little more pages. The hard limitation is the number of indirect objects in the PDF file (223-1).
Test file for LuaTeX 0.95.0 with option --ini
:
\catcode`\{=1
\catcode`\}=2
\directlua{tex.enableprimitives("",{"outputmode"})}
\outputmode=1
\directlua{
\iffalse
pdf.setobjcompresslevel(2)
pdf.setcompresslevel(9)
\else
pdf.setobjcompresslevel(0)
pdf.setcompresslevel(0)
\fi
pdf.setminorversion(5)
}
\countdef\pageno=0
\chardef\one=1
\countdef\max=255
\max=2696336
\def\x{%
\advance\pageno\one
\shipout\hbox{}%
\ifnum\max=\pageno
\let\x\relax
\fi
\x
}
\x
\end
Result:
Pages: 2,696,336
File size: 821,034,398 bytes
PDF without object stream compression
Summary
LuaTeX can generate a PDF document with 2,696,336 empty pages.
XeTeX
XeTeX uses the program xdvipdfmx
as output driver for PDF. It generates the PDF file with empty pages in a similar way as pdfTeX or LuaTeX. However, it uses more nodes (indirect objects) for the page tree than the other TeX compilers. The LuaTeX run with 2,400,000 pages took nearly a minute, but the XeTeX run about 18 minutes.
Test file:
\catcode`\{=1
\catcode`\}=2
\countdef\pageno=0
\chardef\one=1
\countdef\max=255
\max=2400000
\def\x{%
\advance\pageno\one
\shipout\hbox{}%
\ifnum\max=\pageno
\let\x\relax
\fi
\x
}
\x
\end
Command call with options to turn compression off:
xetex -ini -output-driver="xdvipdfmx -C 0x0040 -z 0" test.tex
2,400,001 pages generate the error message:
xdvipdfmx:fatal: Page number 2400002l too large!
File size with 2,400,000 empty pages: 901,335,935 bytes
Version of XeTeX is 3.14159265-2.6-0.99996 (TeX Live 2016)
and the
version of xdvipdfmx is 20160307
.
Summary
XeTeX can generate a PDF document with 2,400,000 empty pages, but it is
much slower than pdfTeX or LuaTeX.
150000
pages...