在 Latex 文档中插入(并引用)未压缩的 PDF 文字?

在 Latex 文档中插入(并引用)未压缩的 PDF 文字?

我有一个文档,其源文件保存在git,我想要类似的东西在每一页上打印 subversion repo 编号...我已经设法提取我需要的信息并将其显示在文档中 - 但有一个问题:要么svn要求git您先提交,然后重新构建 PDF,以便您可以访问最新的修订号/ID(将其插入到文档 PDF 中)。

现在,我有一个脚本,每当提交(成功)时,它都会自动将文档 PDF 上传到某个位置。如果我想在其中包含版本信息 - 我必须运行pdflatex 再次在提交之后,上传开始之前;鉴于文档是巨大的,这意味着我每次提交时都必须额外等待半分钟到一分钟,这会让我非常恼火:)

所以这就是我的想法:如果存在类似 PDF“字符串”变量的东西,它可能在TeXing 步骤中最终在输出 PDF 中被解压缩;那么我可以简单地使用sed -i或其他东西来替换它的内容(这里是修订信息)以最少的时间在提交之后内联。

我的意思是:如果我查看用 生成的典型 PDF pdflatexless -L我通常会得到如下内容:

%PDF-1.5
%<D0><D4><C5><D8>
3 0 obj
<<
/Length 463       
/Filter /FlateDecode
>>
stream
xڭ<95>OO<E3>@^L<C5><EF><F9>^T> ...

也就是说,第一个对象定义是“纯文本”,但其内容是压缩流......(所以原则上我可以解压它们并替换那里的内容,但因为我试图使它尽可能简单,所以我对此不感兴趣)。

现在,PDF 规范实际上没有“字符串变量”:

...但是它确实有一个XObject,您可以定义一次,然后使用重新使用每个页面Do:它的问题是它是绝对的(但我只接受左下角的位置)。

事情是这样的;如果我可以指示 Latex 插入定义XObject,例如:

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

... 在 PDF 文档的开头,未压缩格式;然后如果我使用在每一页中fancyhdr插入/A Do;那么一旦 PDF 文档被构建,我基本上可以sed -i 's/(Hello, world!)/(rev. 117)/' out.pdf在提交后执行并完成它。

(当然,这还不是全部 – 我们还需要插入:

/XObject  <<
          /A 6 0 R  % XObject /A is obj 6 0
>>

...在/Page字典中(不确定它是否可以驻留在其中/Pages),但实际上不需要解压缩。)

那么,一般来说 - 使用LaTeX引擎( pdf、、)可以实现这种 PDF 干预吗?luaxe

答案1

您可以使用

\pdfinfo{/myversion (0.00.00)}

包括名称/myversion您应该使用其他您独有的用户名;理想情况下你会使用 Adob​​e/ISO 注册名称前缀0.00.00) 与结果 PDF 信息字典中的未压缩字符串。然后,您可以轻松地0.00.00用当前版本 (例如sed) 替换,但替换必须具有相同的长度。

相关内容