Ghostscript 9.07:错误:pdfmark 目标...指向最后一页以外

Ghostscript 9.07:错误:pdfmark 目标...指向最后一页以外

我使用gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dFirstPage=$2 -dLastPage=$3 -sOUTPUTFILE=$4 $1脚本从带有 Ghostscript 9.07 的 pdf 文件中提取页面。我收到很多警告(如以下输出中的第一行所示)和一个错误:

GPL Ghostscript 9.07:    **** Warning: Outline has invalid link that was discarded.    
GPL Ghostscript 9.07: ERROR: A pdfmark destination page 4 points beyond the last page 3.

但是,生成的 PDF(包含提取的页面)没有问题。我想知道为什么我选择了 选项,但仍然会出现此错误和警告-qquiet我对此进行了一些搜索,例如,,但 PDF 文件已经生成hypertexnames=false,因此那里建议的解决方案对我的情况(Ubuntu 13.04)不起作用。

只需补充一下:该.pdf文件是通过pdflatex以下方式生成的

\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{tikz}
\usepackage[hypertexnames=false]{hyperref}

\begin{document}
\tikz[remember picture, overlay]\node at (current page.south)[rectangle, fill, color=gray]{};
\clearpage 
\section{foo}
\clearpage
\tableofcontents
\clearpage
\section{bar}
foo bar 
\end{document}

如果注释掉之后的部分\begin{document}gs突然就没有警告也没有错误了,所以这与 PDF 文件的生成方式有关。

答案1

软件包hyperref添加了书签(大纲)。如果只提取了部分页面,那么可能会有页面包含书签条目(例如\section{bar})。但是 ghostscript 不会重新组织书签树(通常不简单)。它只会在复制树时做得很差,删除一些无效条目。这样的页面子集文档对于打印目的来说不是问题。如果您需要交互功能(书签、链接),那么最好直接通过 TeX 生成它。

更新查看错误信息。

示例测试文件:

\RequirePackage{pdf14}
\documentclass[a5paper,12pt]{article}
\usepackage{hyperref}
\hypersetup{pageanchor=false}
\title{Test}
\author{Me}

\begin{document}

\maketitle

\newpage
Reference to first section~\ref{sec:first} and second
section~\ref{sec:second}.

\newpage
\section{First section}
\label{sec:first}

\newpage
\section{Second section}
\label{sec:second}

\end{document}

该文件包含四页和三个目的地:

  • Doc-Starthyperref在文档开头设置,
  • section.1在第 3 页,\section{First section}带有标签sec:first
  • section.2位于第 4 页,\section{Second section}带有标签sec:second

该链接\ref{sec:first}使用\ref{second}后两个目的地作为链接目标。

现在我们删除第一页:

$ ps2pdf -dFirstPage=2 test.pdf test-new.pdf

现在链接\ref{sec:first}仍然指向第 3 页,但这是原始文件的第 4 页test.pdf。它现在应该链接到第 2 页的部分。

此外,目标\ref{sec:second}使用了错误的页码。Ghostscript 忘记了第一页已被删除,并想链接到第四页,但新文档只有三页。因此 Ghostscript 会抱怨:

GPL Ghostscript 9.05: ERROR: A pdfmark destination page 4 points beyond the last page 3.

因此我认为这是 Ghostscript 中的错误。

更好的工作是pdftk

$ pdftk test.pdf cat 2-4 output test-new.pdf

这里的链接是正确的。但是书签/大纲被删除了。(但是 Ghostscript 的书签不太好用,因为目的地使用了错误的页面,如上所示。)我认为这是 ghostscript 中的错误。如果第一页(-dFirstPage)大于,它就会混淆1。它似乎将原始文档的页码作为目的地(的链接目标\ref

相关内容