The question how to create identical PDF files with pdflatex was basically answered in this question already:
How to create identical PDF files?
The catch was to filter out the entry /ID
in the trailer dictionary after the PDF file was created.
I am now forced to use xelatex and there this trick does not work any more, because there are many more changes in the resulting PDF files.
Here is the minimal working example again:
\documentclass[11pt,a4paper]{article}
\usepackage[]{hyperref}
\hypersetup{
pdfauthor={None},
pdfcreationdate={D:20131010120000},
pdfmoddate={D:20131010120000}
}
\begin{document}
foo
\end{document}
If I now create 2 PDF files, convert them to a hex dump and view the differences…
xelatex mwe.tex; mv mwe.pdf a.pdf; xxd a.pdf > a.bin
xelatex mwe.tex; mv mwe.pdf b.pdf; xxd b.pdf > b.bin
diff -u a.bin b.bin
… then you can see that there are many differences in the resulting PDF files unfortunately.
Is there any way to produce bitwise identical PDF files with xelatex?
The reason I need this is that I'd like to create PDF files for a software release package. Of course the software release package should be identical when the underlaying software and documentation has not been changed.
Best Answer
with recent Texlive releases you can use
You may also want to set
the first setting is the epoch setting. That is, the number of seconds since 1970.
E.g., for today (rather than 0 which is the 1st Jan 1970) you could use
1505482364
as found by:The second if set to 1 (or anything) causes tex commands such as
\year
to use the specified epoch date rather than the system clock.The combination of two of them produces reproducible results (after the second run) in texlive2017 using the supplied test file.
First run:
produces:
second run
produces:
save pdf
run again
compare
No output from
cmp
confirming that the files are identical.