我正在尝试将其他 xmp 元数据添加到 hyperxmp 未涵盖的 pdf 文件中。我尝试同时使用 hyperxmp 和 xmpincl。在 TeXnicCenter 中构建项目不会产生任何错误,因此我认为包含和使用这两个包是可以的。但是当我通过 java 代码提取 xmp 文件时,xmp 文件中存储的唯一 xmp 元数据是使用 hyperxmp 创建的元数据。我做错了什么,还是真的无法同时使用这两个包?
答案1
你不能直接使用这些包hyperxmp
和xmpincl
合并到一个文档中,因为最终 PDF 文件会包含两个不兼容的 XMP 元数据条目。但是,您可以重复使用由hyperxmp
如手册:
hyperxmp
和xmpincl
可以相互补充。作者可能希望使用hyperxmp
来生成一组基本的 XMP 代码,然后使用文本编辑器从 PDF 文件中提取 XMP 代码,使用 不支持的任何元数据来扩充 XMP 代码hyperxmp
,并使用xmpincl
将修改后的 XMP 代码包含在 PDF 文件中。
为了稍微简化这个过程,您可以创建一个文档metadata.tex
,在其中设置所有元数据hyperxmp
,并将生成的 XMP 代码写入文件metadata.xmp
:
metadata.tex
\documentclass{article}
\usepackage{hyperref}
\usepackage{hyperxmp}
\newwrite\xmpmetadata
\makeatletter
\hyxmp@at@end{%
% Create XMP code and write it to macro \hyxmp@xml
% (cf. hyperxmp.sty, \hyxmp@construct@packet (ll. 847-868))
\gdef\hyxmp@xml{}%
\hyxmp@add@to@xml{%
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-702">^^J%
___<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns\hyxmp@hash">^^J%
}%
\hyxmp@pdf@schema
\hyxmp@xmpRights@schema
\hyxmp@dc@schema
\hyxmp@photoshop@schema
\hyxmp@photometa@schema
\hyxmp@xmp@basic@schema
\hyxmp@mm@schema
\hyxmp@add@to@xml{%
___</rdf:RDF>^^J%
</x:xmpmeta>^^J%
}%
% Write content of \hyxmp@xml to file metadata.xmp
\immediate\openout\xmpmetadata=metadata.xmp%
\immediate\write\xmpmetadata{\hyxmp@xml}%
\immediate\closeout\xmpmetadata%
}
\makeatother
% Specify the XMP metadata here
\hypersetup{
pdfauthor={Author},
pdftitle={Title},
pdfcopyright={(c) 2013 by Author}
}
\begin{document}
The purpose of this document is to generate a file \texttt{metadata.xmp} containing XMP metadata.
\end{document}
这将生成一个文件metadata.xmp
,您可以根据需要修改它并将其包含到您的主文档中:
document.tex
\documentclass{article}
\usepackage{hyperref}
\usepackage{xmpincl}
\includexmp{metadata}
\begin{document}
This is the main document, using the XMP metadata found in \texttt{metadata.xml}.
\end{document}