# How to generate PDF 2.0 output using pdflatex

Based on the manual of PDFLaTeX, it seems pdflatex can support generating pdf up to version 1.7 (ISO 32000-1:2008) using \pdfminorversion=7. To use PDF 2.0 (ISO 32000-2:2017), can I define a major version number =2 alongside with \pdfminorversion=0 or something like that?

• Painting red a 50 year old Fiat 500 doesn't make it into a Ferrari. :-) Not that pdftex should be compared to a 50 year old Fiat 500, but it doesn't support the new features in PDF 2.0, yet. – egreg Apr 12 '18 at 7:51
• See my comment at tex.stackexchange.com/a/60186/5763 – Martin Schröder Apr 13 '18 at 9:11
• Why do you want to do that? Do you have any software that needs PDF 2.0? – Martin Schröder Apr 13 '18 at 9:11
• @MartinSchröder I actually have to include a PDF 2.0 figure into my tex given by others. But when I compile in a normal way, it always complains the compiler can only support PDF up to v1.7/1.6 or something like that. After searching around, the solution seems to be updating pdf version number to 2.0 for the compiling. – Xiaodong Qi Apr 21 '18 at 6:07
• @XiaodongQi: You have a PDF 2.0 figure? How did you produce that? – Martin Schröder Apr 21 '18 at 11:15

You can generate a PDF document that claims to conform to the PDF 2.0 specification using luatex (tested with version 1.10.0) as follows:

\documentclass{article}
\begin{document}
\directlua {
pdf.setmajorversion(2)
pdf.setminorversion(0)
}
Foo.
\end{document}


On this simple example, the output does seem compatible with the standard, at least according to the pdf-tools online validator. That won't necessarily be the case for more complex documents, even if the 2.0 specification has been designed as much as possible as a superset of previous versions, to allow graceful degradation for software that has been developed for older versions of the standard.

At present the answer is no for pdfTeX, but plans for TeX Live 2020 work are already in place and I (and others) will look to add a new primitive to support this (likely \pdfmajorversion). The main issue is not the primitive itself but the supporting 'environment': there are lots of places that test for the minor version as a boundary/cut off for different features, and picking up that 2.0 > 1.4 is going to be fun!