Saltar al contenido

¿Cuál es el número máximo de páginas que puede tener un PDF producido por pdfTeX?

Si te encuentras con alguna parte que no entiendes puedes dejarlo en la sección de comentarios y te responderemos rápidamente.

Solución:

pdfTeX

Las páginas se almacenan en una estructura de página, un árbol equilibrado. El nodo superior contiene un número entero con el número de páginas. El número entero máximo en PDF y TeX es 231−1 (2.147.483.647). Sin embargo, se necesitan objetos indirectos para almacenar páginas en formato PDF (especificación PDF):

  • 1 nodo de página por página;
  • 1 Objeto de recursos por página (pdfTeX genera el objeto para cada página, incluso si los objetos de recurso son los mismos y se pueden compartir);
  • 1 Objeto de contenido por página (en teoría, páginas iguales podrían compartir el mismo objeto, pero no es compatible con pdfTeX y es poco probable que se trate de documentos reales).
  • Sobrecarga de la estructura del árbol de la página con nodos adicionales para niños;
  • Y el documento tiene algunos objetos adicionales (por ejemplo, catálogo, información).

Por tanto, se necesitan más de 3 objetos indirectos por página. Pero el número de objetos indirectos (los objetos indirectos son objetos PDF a los que se puede hacer referencia mediante el número de objeto y se registran en la sección de referencia cruzada) es limitado: 223−1 (8.388.607).

El siguiente archivo de prueba explora el número máximo de páginas con pdfTeX. Solo genera páginas mínimas sin fuentes, anotaciones. Las páginas están completamente vacías (shipouthbox).

% pdftex --ini test.tex
catcode`=1
catcode`=2
pdfoutput=1
iffalse
  pdfobjcompresslevel=2
  pdfcompresslevel=9
else
  pdfobjcompresslevel=0
  pdfcompresslevel=0
fi
pdfminorversion=5
countdefpageno=0
chardefone=1
countdefmax=255
max=2621437
defx%
  advancepagenoone
  shipouthbox%
  ifnummax=pageno
    letxrelax
  fi
  x

x
end

Probado con pdfTeX 3.1415925-2.4-1.40.13 (TeX Live 2012). Resultado:

Pages: 2,621,437
File size: 862,082,448 bytes
PDF without object stream compression

Si el número de página aumenta en uno, pdfTeX se queja con un mensaje de error:

! TeX capacity exceeded, sorry [indirect objects table size=8388607].

La compresión de secuencias de objetos PDF de PDF-1.5 reduce el tamaño del archivo, pero cuesta objetos indirectos para almacenar las secuencias de objetos. Eso disminuye el número máximo de páginas. Para probar, reemplace iffalse por iftrue en el ejemplo anterior y juegue con la configuración de max. Resultado:

Pages: 2,603,538
File size: 329,412,496
PDF with object stream compression

En la práctica, especialmente las anotaciones cuestan objetos (y por lo tanto páginas), mientras que las fuentes se pueden reutilizar en todo el documento.

Resumen

El número máximo teórico de páginas para archivos PDF con pdfTeX es 2,621,437 (páginas vacías y sin compresión de flujo de objetos de PDF-1.5).

LuaTeX 0.95.0

LuaTeX derivado de pdfTeX, por lo que la página vacía utiliza la misma cantidad de objetos que en el caso de pdfTeX. El árbol de páginas se almacena con menos objetos, porque pdfTeX usa 6 niños en un nodo de árbol de páginas, pero LuaTeX ha aumentado el número a 10 niños por nodo de árbol de páginas.

Por lo tanto, LuaTeX puede crear un poco más de páginas. La limitación estricta es la cantidad de objetos indirectos en el archivo PDF (223-1).

Archivo de prueba para LuaTeX 0.95.0 con opción --ini:

catcode`=1
catcode`=2
directluatex.enableprimitives("","outputmode")
outputmode=1
directlua
  iffalse
     pdf.setobjcompresslevel(2)
     pdf.setcompresslevel(9)
  else
    pdf.setobjcompresslevel(0)
    pdf.setcompresslevel(0)
  fi
  pdf.setminorversion(5)

countdefpageno=0
chardefone=1
countdefmax=255
max=2696336
defx%
  advancepagenoone
  shipouthbox%
  ifnummax=pageno
    letxrelax
  fi
  x

x
end

Resultado:

Pages: 2,696,336
File size: 821,034,398 bytes
PDF without object stream compression

Resumen

LuaTeX puede generar un documento PDF con 2.696.336 páginas vacías.

XeTeX

XeTeX usa el programa xdvipdfmx como controlador de salida para PDF. Genera el archivo PDF con páginas vacías de forma similar a pdfTeX o LuaTeX. Sin embargo, utiliza más nodos (objetos indirectos) para el árbol de la página que los otros compiladores de TeX. La ejecución de LuaTeX con 2,400,000 páginas tomó casi un minuto, pero la ejecución de XeTeX alrededor de 18 minutos.

Archivo de prueba:

catcode`=1
catcode`=2
countdefpageno=0
chardefone=1
countdefmax=255
max=2400000
defx%
  advancepagenoone
  shipouthbox%
  ifnummax=pageno
    letxrelax
  fi
  x

x
end

Llamada de comando con opciones para desactivar la compresión:

xetex -ini -output-driver="xdvipdfmx -C 0x0040 -z 0" test.tex

2.400.001 páginas generan el mensaje de error:

xdvipdfmx:fatal: Page number 2400002l too large!

Tamaño de archivo con 2,400,000 páginas vacías: 901,335,935 bytes

La versión de XeTeX es 3.14159265-2.6-0.99996 (TeX Live 2016) y la versión de xdvipdfmx es 20160307.

Resumen

XeTeX puede generar un documento PDF con 2,400,000 páginas vacías, pero es mucho más lento que pdfTeX o LuaTeX.

TeX está diseñado para tener requisitos de memoria muy limitados (básicamente, una vez que se envía una página, desaparece). longtable documentos con decenas de miles de páginas en la década de 1990, así que en las máquinas modernas no creo que 170 páginas estresen demasiado el sistema.

Lo que es más importante que el recuento de páginas es la complejidad de la página: si tiene una trama de alta resolución hecha en tikz o en modo de imagen o algo así, eso termina siendo una gran cantidad de cajas en la misma pagina. Es por eso que a veces ayuda generar elementos como la inclusión de gráficos externos. A menos que cambien en cada ejecución, esto generalmente acelerará las cosas incluso si calcularlos en línea no excede los requisitos de memoria.

Aparte de los límites arquitectónicos de PDF (el número de objetos indirectos en un PDF está limitado a 8Mi según ISO-32000: 2008, y los números están limitados a 2Gi), no existen límites conocidos. Si la memoria lo permite y su disco es lo suficientemente grande, pdfTeX debería poder generar PDF hasta algunos TiBytes. Eventualmente fallará; el tamaño de compensación en la tabla de referencias externas comprimida está actualmente limitado a 240(5 bytes), pero ampliar ese límite es fácil.

Comentarios y puntuaciones del tutorial

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *