## Friday, January 6, 2012

### pdfx.sty date conversion

Hi everybody,

there has been a bazillion changes in my life (finishing the Google internship and working in my startup fulltime) and I want to sum that up in another post. This is just a quick tip for people who want to generate PDF/X files with LaTeX.

Some resources:
http://ctan.org/tex-archive/macros/latex/contrib/pdfx
http://support.river-valley.com/wiki/index.php?title=Generating_PDF/A_compliant_PDFs_from_pdftex

From there, you want to make sure you handle your color profiles:
http://www.colormanagement.org/en/isoprofile.htm

One issue I run into with pdfx.sty a couple of times is a date conversion function, that in the original looks something like this:
\def\convertDate{\getYear}
{\catcode\D=12
\gdef\getYear D:#1#2#3#4{\edef\xYear{#1#2#3#4}\getMonth}
}
\def\getMonth#1#2{\edef\xMonth{#1#2}\getDay}
\def\getDay#1#2{\edef\xDay{#1#2}\getHour}
\def\getHour#1#2{\edef\xHour{#1#2}\getMin}
\def\getMin#1#2{\edef\xMin{#1#2}\getSec}
\def\getSec#1#2{\edef\xSec{#1#2}\getTZh}
\def\getTZh +#1#2{\edef\xTZh{#1#2}\getTZm}
\def\getTZm '#1#2'{%
\edef\xTZm{#1#2}%
\edef\convDate{\xYear-\xMonth-\xDay
T\xHour:\xMin:\xSec+\xTZh:\xTZm}}
\expandafter\convertDate\pdfcreationdate


The problem with this piece of code is that it hard-codes the time format produced by \pdfcreationdate which seems to be different on different platforms (Miktex,Tex-live etc). This particular code expects the date to look like this:
D:20091202141420+05'00'

However people around the Internets are running into errors if their date has '-' instead of the '+' sign. The fix for that is simple, just substitute the sign in the above snippet. Btw the error looks like this:
! Use of \getTZh doesn't match its definition.
D:20120106132719Z

l.132 \expandafter\convertDate\pdfcreationdate

The time format that I've got from \pdfcreationdate was even more off:
D:20120106135936Z

To parse this, I had to rewrite the function entirely:
\def\convertDate{\getYear}
{\catcode\D=12
\gdef\getYear D:#1#2#3#4{\edef\xYear{#1#2#3#4}\getMonth}
}
\def\getMonth#1#2{\edef\xMonth{#1#2}\getDay}
\def\getDay#1#2{\edef\xDay{#1#2}\getHour}
\def\getHour#1#2{\edef\xHour{#1#2}\getMin}
\def\getMin#1#2{\edef\xMin{#1#2}\getSec}
\def\getSec#1#2#3{
\edef\xSec{#1#2}
\edef\convDate{\xYear-\xMonth-\xDay T\xHour:\xMin:\xSec}%
}
\expandafter\convertDate\pdfcreationdate


I will add to this article after I run the pdf through Distiller to check the PDF/X compliance.

#### 1 comment:

1. Thanks a lot, this solution put an end to my headache :D