这段代码:
\documentclass[12pt]{article}
\usepackage{graphicx}
\begin{document}
\section{a}
b
\includegraphics{Nomogram3d_v05a.pdf}
c
\end{document}
崩溃pdflatex
并显示以下错误消息:
Command Line: pdflatex.exe --interaction=errorstopmode --synctex=-1 "tst.tex"
Startup Folder: D:\klad
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (MiKTeX 2.9)
entering extended mode
(D:\klad\tst.tex
LaTeX2e <2011/06/27>
Babel <v3.8m> and hyphenation patterns for english, afrikaans, ancientgreek, ar
abic, armenian, assamese, basque, bengali, bokmal, bulgarian, catalan, coptic,
croatian, czech, danish, dutch, esperanto, estonian, farsi, finnish, french, ga
lician, german, german-x-2013-05-26, greek, gujarati, hindi, hungarian, iceland
ic, indonesian, interlingua, irish, italian, kannada, kurmanji, latin, latvian,
lithuanian, malayalam, marathi, mongolian, mongolianlmc, monogreek, ngerman, n
german-x-2013-05-26, nynorsk, oriya, panjabi, pinyin, polish, portuguese, roman
ian, russian, sanskrit, serbian, slovak, slovenian, spanish, swedish, swissgerm
an, tamil, telugu, turkish, turkmen, ukenglish, ukrainian, uppersorbian, usengl
ishmax, welsh, loaded.
("C:\Program Files\MiKTeX 2.9\tex\latex\base\article.cls"
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
("C:\Program Files\MiKTeX 2.9\tex\latex\base\size12.clo"))
("C:\Program Files\MiKTeX 2.9\tex\latex\graphics\graphicx.sty"
("C:\Program Files\MiKTeX 2.9\tex\latex\graphics\keyval.sty")
("C:\Program Files\MiKTeX 2.9\tex\latex\graphics\graphics.sty"
("C:\Program Files\MiKTeX 2.9\tex\latex\graphics\trig.sty")
("C:\Program Files\MiKTeX 2.9\tex\latex\00miktex\graphics.cfg")
("C:\Program Files\MiKTeX 2.9\tex\latex\pdftex-def\pdftex.def"
("C:\Program Files\MiKTeX 2.9\tex\generic\oberdiek\infwarerr.sty")
("C:\Program Files\MiKTeX 2.9\tex\generic\oberdiek\ltxcmds.sty"))))
No file tst.aux.
("C:\Program Files\MiKTeX 2.9\tex\context\base\supp-pdf.mkii"
[Loading MPS to PDF converter (version 2006.09.02).]
)Syntax Error: Kid object (page 1) is not an indirect reference (dictionary)
如果我注释掉该\includegraphics
语句,即如果我运行:
\documentclass[12pt]{article}
\usepackage{graphicx}
\begin{document}
\section{a}
b
c
\end{document}
一切正常并产生输出。我检查了文件Nomogram3d_v05a.pdf
是否存在,并且在 Sumatrapdf 查看器中渲染没有问题。
答案1
我看不出有什么理由不相信错误消息,即所包含的 PDF 文件无效。创建 PDF 文件的应用程序存在错误。尝试
pdfinfo Nomogram3d_v05a.pdf
得到提示,哪个程序可能是罪魁祸首。
错误描述
页面以页面树的形式组织,页面对象为根,中间节点和叶子为页面。所有这些对象都必须是编号对象(又称间接对象),因为某些 PDF 功能引用页面字典对象。如果此对象直接嵌入在页面树中,则它没有编号。
如何重现
我创建了一个这样的错误 PDF 文件。里面/Kids [...]
应该有一个间接引用2 0 obj
,其中包含内容<</Type/Page...>>
。在这种情况下,后者对象被直接放入数组中,/Kids
导致 PDF 文件无效。
%PDF-1.5
%ÐÔÅØ
3 0 obj
<<
/Length 37
>>
stream
1 0 0 1 40 40 cm
0 0 20 20 re f
endstream
endobj
1 0 obj
<<
/ProcSet [ /PDF ]
>>
endobj
4 0 obj
<<
/Type /Pages
/Count 1
/Kids [
<<
/Type/Page
/Contents 3 0 R
/Resources 1 0 R
/Parent 4 0 R
/MediaBox[0 0 100 100]
>>
]
>>
endobj
5 0 obj
<<
/Type /Catalog
/Pages 4 0 R
>>
endobj
xref
0 6
0000000002 65535 f
0000000096 00000 n
0000000000 00000 f
0000000015 00000 n
0000000135 00000 n
0000000299 00000 n
trailer
<< /Size 6
/Root 5 0 R
>>
startxref
348
%%EOF
f
提示:以或n
之后结尾的行xref
必须以 DOS 行结尾("\r\n"
= 字节 13 和 10)或以空格和换行符结尾("␣\n"
= 字节 32 和 10)。
一些 PDF 程序的结果
MiKTeX 的 pdfTeX 1.40.16、MiKTeX 的
pdfinfo
0.32.0、TeX Live 的pdfinfo
0.30.0 显示错误:Syntax Error: Kid object (page 1) is not an indirect reference (dictionary)
SumatraPDF v3.0 显示该文档。
Adobe Acrobat Reader DC 2015 显示该文档,但由于未指定的读取错误而无法保存它。
pdftk
2.02 打破了:Unhandled Java Exception in create_output(): ExceptionConverter: java.io.IOException: The document has no pages.
TeX Live 的 pdfTeX 1.40.16 和
xpdf
3.03 存在以下问题:Syntax Error: Page tree reference is wrong type (dictionary) Syntax Error: Invalid page count in page tree
Ghostscript
ps2pdf
9.15 和 9.16 有效。
修复 PDF 文件
为了修复,需要一个程序,该程序具有足够的容忍度来读取和理解文件,并在保存文件时纠正错误。
(-) 通过 SumatraPDF 保存文件只是复制文件,但不会修复它。
(-) AR 或
pdftk
无法读取和/或保存文件。(+) Ghostscript 成功:
ps2pdf Nomogram3d_v05a.pdf Nomogram3d_v05a-fixed.pdf