pdfx + hyperref 阻止设置 PDF 元数据

pdfx + hyperref 阻止设置 PDF 元数据

编辑:显然hyperxmppdfx不相容。

我使用pdfx,然后使用\hypersetuphyperxmp包来根据需要设置元数据。我遇到了两个问题。

  1. 我现在使用的元数据似乎没有设置pdfx
  2. “pdftitle 已设置”等警告。

有什么建议么?

平均能量损失

\documentclass{scrartcl}
\usepackage[a-3u,pdf17]{pdfx}

\title{BMC}
\subtitle{Pret\ldots}
\author{me}

\usepackage{hyperref}
\usepackage{hyperxmp}

\hypersetup{
    pdftitle={\@title},
    pdfauthor={\@author},
    pdfcreator=pdfLaTeX,
    pdfproducer={\@author},
    pdfapart=3, % need hyperxmp for this
    pdfaconformance=U % need hyperxmp for this
}

\begin{document}

Hello

\end{document}

答案1

我对 一无所知hyperxmp,但可以肯定的是,pdfx包加载xmpincl可以处理预期的 XMP 元数据。您的问题可能是由于轻微的语法混乱引起的。

1. 你的方法

\hypersetup{
    pdftitle={\@title},
    pdfauthor={\@author},
    pdfcreator=pdfLaTeX,
    pdfproducer={\@author},
}

应该可以工作,只要:

  • 你已经加载hyperref
  • 你还没有加载pdfx (见pdfx手动的 第 17 页)
  • 你没有使用\maketitle默认情况下清空\@title两者\@author

一位 MWE 表示:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{blindtext} % for example text only
\title{A simple title}
\author{A cute author}
\usepackage{hyperref}
\makeatletter
\hypersetup{
    pdftitle={\@title},
    pdfauthor={\@author},
    pdfcreator={pdfLaTeX with hyperref},
    pdfproducer={\@author},
    pdfsubject={Some answer about metadata},
    pdfkeywords={LateX  hyperref},
}
\makeatother
\begin{document}
\blindtext
\end{document}

以及 PDF-Xchange 和 Adob​​e Reader 中显示的元数据: 在此处输入图片描述

2. 另一种选择,无需hyperref,使用 pdfLaTeX 的命令\pdfinfo,用法如下:

   \pdfinfo {   
      /Title (\@title)
      /Author (\@author)
      /Subject (\@suject)
      /Keywords (\@keywords) 
   }

马德里理工学院:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{blindtext}
\title{A simple title}
\author{A cute author}
%\usepackage{hyperref}
\makeatletter
\pdfinfo {   
          /Title (\@title)
          /Author (\@author)
          /Subject (Some answer about metadata)
          /Keywords (LateX  hyperref) 
       }
\makeatother
\begin{document}
\blindtext
\end{document}

结果: 在此处输入图片描述

3. 如果你加载 pdfx,元数据集依赖于\jobname.xmpdata看起来像的文件(参见pdfx手动的 第 6 页):

\Title{Baking through the ages}
\Author{A. Baker\sep C. Kneader}
\Language{en-GB}
\Keywords{cookies\sep muffins\sep cakes}
\Publisher{Baking International}
\CoverDisplayDate{1er\ avril\ 1999}
\CoverDate{1999-04-01}

正如1.中所说,\hypersetup方法被禁用。

第三个 MWE:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{blindtext}
\usepackage[a-3b,pdf17]{pdfx}
\title{A simple title}
\author{A cute author}
%\usepackage{hyperref}
\begin{filecontents*}{\jobname .xmpdata}
\Title{Another simple title}
\Author{A cute author}
\Subject{Some answer about metadata}
\Keywords{LateX \sep hyperref} 
\end{filecontents*}
\begin{document}
\blindtext
\end{document}

及其结果: 在此处输入图片描述

请注意:

  • 根据@UlrikeFischer 的回答,我用的pdfa-3b并不适合pdfa-3u
  • 在第三种方案(pdfx)中,标题是在中编写的.xmpdata,独立于 \title主文档
  • 创作者、制作人以及其他同类关键词通常由pdflatex和自动设置pdfx,如果您真的想要自定义它们,则可能需要付出更多的努力。

答案2

pdfx截至 2020 年 3 月,xmpincl其使用与 不兼容的格式hyperxmp。但您可能不需要 pdfx。Hyperxmp 是处理元数据的更优雅的方式,因为它与 无缝集成,hyperref并且\maketitle不需要外部文件。它适用于 PDF/A-1b 和 PDF/A-3u。

%\pdfobjcompresslevel=0 %uncomment for Texlive
\documentclass{scrartcl}

\usepackage[pdfa]{hyperref}
\usepackage{hyperxmp}
\usepackage{mmap} %only needed for pdfTeX

\title{BMC}
\subtitle{Pret\ldots}
\author{me}

\hypersetup{%
    pdfapart=1,
    pdfaconformance=b
}

\immediate\pdfobj stream attr{/N 3} file{sRGB.icc}
\pdfcatalog{%
  /OutputIntents [
    <<
      /Type /OutputIntent
      /S /GTS_PDFA1
      /DestOutputProfile \the\pdflastobj\space 0 R
      /OutputConditionIdentifier (sRGB)
      /Info (sRGB)
    >>
  ]
}

\begin{document}

lorem ipsum

\end{document}

答案3

是的,使用解决方案 1 和 2,即没有 pdfx,您可以使用\@title \@author\@date。前提是您在之前完成此操作\maketitle,或者对其进行修补以避免被擦除。

我的回答与解决方案 3 有关,因为环境中的宏将逐字写入文件中。因此,如果您使用 128 个 ASCII 范围之外的字母,则filecontents需要特定的编码,但编码问题较小。\write

相关内容