如何在 PDF 上自动设置 CreationDate

如何在 PDF 上自动设置 CreationDate

使用 pdflatex 编译文档时,可以使用 设置文档的 PDF CreationDate \pdfinfo{...}。我想自动将其设置为\date{...}文档中提供的日期。

其中一种方法如下。

\documentclass{article}
\usepackage[en-US]{datetime2}

\title{My Title}
\author{A. U. Thor}
\date{\DTMdisplaydate{2011}{12}{13}{-1}}
%\date{Winter 2011} % compiles, but results in blank CreationDate
%\date{\DTMdate{2011-12-13}} % compiles, but results in blank CreationDate due to robustness

\makeatletter
{\DTMsetstyle{pdf}
\pdfinfo{
    /Title  (\@title)
    /CreationDate (\@date 000000-05'00')
}}
\makeatother

\begin{document}
\maketitle % typesets date in a US-style, as expected
\end{document}

但是这个解决方案似乎有几个不太理想的地方。首先,我需要编写代码\@date 000000-05'00'来将日期转换为带时区的完整时间(需要时区以避免日期以 UTC 定义,然后在美国显示为早一天)。其次,我需要使用 来\DTMdisplaydate扩展\DTMdate宏。

由于这似乎是一件相当标准的事情,我想知道其他 pdflatex 用户开发了什么解决方案。

答案1

我个人的方法是像这样保存这个日期:

\documentclass{article}
\usepackage[en-US]{datetime2}

\DTMsavetimestamp{creation}{2011-12-13T00:00:00-05:00}

\title{My Title}
\author{A. U. Thor}
\date{\DTMusedate{creation}}

\makeatletter
{\DTMsetstyle{pdf}
\pdfinfo{
    /Title  (\@title)
    /CreationDate (\DTMuse{creation})
}}
\makeatother

\begin{document}
\maketitle % typesets date in a US-style, as expected
\end{document}

您可以提供这样的包装器命令:

\documentclass{article}
\usepackage[en-US]{datetime2}

\newcommand{\mydate}[1]{%
  \DTMsavetimestamp{creation}{#1T00:00:00-05:00}%
  \date{\DTMusedate{creation}}%
  {\DTMsetstyle{pdf}%
  \pdfinfo{
    /CreationDate (\DTMuse{creation})
  }}%
}

\title{My Title}
\author{A. U. Thor}
\mydate{2011-12-13}

\makeatletter
\pdfinfo{
    /Title  (\@title)
}
\makeatother

\begin{document}
\maketitle % typesets date in a US-style, as expected
\end{document}

如果您的时区为负数,则至少需要版本 1.5.3(2018-07-20)以避免在时区之前datetime2意外插入的错误。\relax

相关内容