I'm having a document whose source files are kept in
git, and I'd like something similar to Print subversion repo number on each page ... I've already managed to pull the information I need and show it in the doc - except there's one problem: pretty much either
git require you to commit first, then re-build the PDF, so that you can access the latest revision number/ID (to insert it in the document PDF).
Now, I have a script, that automatically uploads the document PDF to a location, whenever a commit has been (successfully) made. If I want to include versioning info in there - I'd have to run
pdflatex yet again after a commit has been made, and before upload has commenced; given that the document is huge, that would mean I'd have to wait extra half-a-minute to a minute each time I commit, which would irritate me immensely
So this is what I was thinking: if there was something like a PDF "string" variable, which could end up uncompressed in the output PDF during the
TeXing step; then I could simply use
sed -i or something to replace it's content (here the revision info) inline using minimal time, right after a commit is made.
Here is what I mean: if I look at a typical PDF produced by
less -L, I usually get something like this:
%PDF-1.5 %<D0><D4><C5><D8> 3 0 obj << /Length 463 /Filter /FlateDecode >> stream xڭ<95>OO<E3>@^L<C5><EF><F9>^T> ...
That is, the very first object definition is "plain text", but its contents are a compressed stream... (so in principle I could unpack those, and replace content there, but since I'm trying to make it as simple as possible, I'm not interested in that).
Now, the PDF spec doesn't really have a "string variable":
... but it does have an
XObject, which you can define once, and then re-use each page with
Do: the problem with it is that is absolute (but I'd live with just bottom left placement).
So this is the thing; if I could instruct Latex to insert the
XObject definition, e.g.:
6 0 obj << /Type /XObject /Subtype /Form /FormType 1 /BBox [ 0 0 1000 1000 ] /Matrix [ 1 0 0 1 0 0 ] /Resources << /ProcSet [ /PDF ] >> /Length 58 >> stream %70 50 TD % without this `TD` setting, `/A Do` places this in 0,0 - bottom left corner /F1 12 Tf (Hello, world!) Tj endstream endobj
... at the start of the PDF document, in uncompressed format; and then if I use say
fancyhdr to insert
/A Do in every page; then once the PDF document is built, I could basically just do
sed -i 's/(Hello, world!)/(rev. 117)/' out.pdf after the commit is made, and be done with it.
(Of course, this isn't all - we'd need to insert also, say:
/XObject << /A 6 0 R % XObject /A is obj 6 0 >>
... in the
/Page dictionary (not sure if it can reside in
/Pages), but that doesn't really need to be uncompressed.)
So, in general - is this kind of PDF intervention possible with LaTeX engines (