在 PDF 中显示元数据

在 PDF 中显示元数据

超级菜鸟问题:是否可以显示元数据是否要使用 hyperref 插入生成的 PDF 本身?我并不是要在生成过程中设置它们,那样很容易。

我知道在创建 PDF 后搜索并替换文本字符串是不可能的,或者有点困难。我有一些不错的 LaTeX 发票模板,通常只有一些数据会发生变化。

我想在生成 PDF 后使用 C 或 Objective-C 更改这些数据。在我看来,元数据可能更易于通过编程访问,而且我不想丢失 PDF 中出色的 LaTeX 排版文本。

我想使用元数据作为某种内置数据库。

我疯了吗?

例如,“作者”字段可以设置为占位符值,如 XXX,然后我稍后只需以编程方式访问 PDF 元数据即可设置/更改它(换句话说,在后期制作中不使用 LaTeX)。

它就像一个可填写的 PDF,但使用元数据作为更新文本的手段。

编辑

我知道这可能是一个自动化扭曲的想法,但问题来自于使用场景。我想为 iOS(iPhone 和 iPad)制作一个简单的发票应用程序,我想使用我用 LaTeX 创建的排版精美的 pdf。我知道由于各种许可问题,我无法将 TEX 嵌入到应用程序中。同时,我不喜欢依赖像 scribtex 这样的外部、网络可达的 TEX 引擎。

答案1

如果我理解正确的话,您希望 PDF 文档中的字段显示文件元数据中所述的当前作者。像这样,您希望能够通过使用外部程序更改元数据来更新文档,这比直接操作文本更容易。

理论上,使用 PDF 表单和 Acrobat JavaScript 可以实现这一点:hyperref包能够创建可填写的表格,并与insdljs包中,您可以插入代码来使用文档信息更新字段。(insdljsAcroTeX 捆绑包,它位于 MiKTeX 中,但不位于 TeX Live 中,因此您可能需要手动安装它。)

概念证明:

\documentclass{article}
\usepackage{hyperref}
\usepackage[pdftex]{insdljs}
\OpenAction{/S /JavaScript /JS (this.getField("fullname").value = this.info.author;)}
\hypersetup{pdfauthor={diabonas}}
\begin{document}
\begin{Form}
\TextField[name=fullname]{Name: }
\end{Form}
\end{document}

pdfauthor设置为表单字段显示某些内容,您可以使用外部程序更改 PDF 作者以查看其是否有效。)

结果:

已填写的表单字段


然而,这种方法有两个缺点:

  1. 插入的文本看起来与周围的文本有很大不同。
  2. 除了 Adob​​e(Reader)之外,JavaScript 在许多 PDF 阅读器中都不起作用,因此,除非您安装了此程序并激活了 JavaScript,否则您将得到一个空白字段。

问题 #1 可以通过使用各种格式选项来解决描述于hyperref手册

为了克服缺点#2,我建议采用与使用文档的元数据更新文本不同的方法:

  1. 创建一个包含可填写表单的 PDF 文档(这与我们已经做的几乎相同,但没有 JavaScript 部分):

    \documentclass{article}
    \usepackage{hyperref}
    \begin{document}
    \begin{Form}
    \TextField[name=fullname]{Name: }
    \end{Form}
    \end{document}
    
  2. 创建一个所谓的 FDF(表单数据格式)文件,其中包含要插入 PDF 文档的信息。对于我们的最小示例,该文件将如下所示(替换Firstname Lastname为要插入的名称):

    %FDF-1.2
    %âãÏÓ
    1 0 obj 
    <<
    /FDF 
    <<
    /Fields [
    <<
    /V (Firstname Lastname)
    /T (fullname)
    >>]
    >>
    >>
    endobj 
    trailer
    
    <<
    /Root 1 0 R
    >>
    %%EOF
    

    要创建可以自行填充的“模板”FDF 文件,可以使用 PDF 工具包pdftk

    pdftk form.pdf generate_fdf output form.fdf
    
  3. 现在,您可以使用以下命令将准备好的 FDF 文件写入form.fdf原始 PDF 格式:form.pdfpdftk

    pdftk form.pdf fill_form form.fdf output form-filled.pdf flatten
    

这似乎比第一种方法工作量更大,但结果是,您得到一个可以被任何 PDF 阅读器查看的静态文档。

答案2

pdfinfo从 poppler/xpdf使用。

相关内容