平均能量损失

平均能量损失

如何全局设置奇数页和偶数页不同的 PDF 页面框?

我尝试使用该everypage包,但它似乎并没有真正将 PDF 页面框插入到当前页面对象中。

我可以\pdfpageattr直接在页面上使用,并且页面框设置正确。

平均能量损失

\documentclass{article}
\usepackage{ifoddpage}
\usepackage{everypage}
\AddEverypageHook{
  \checkoddpage
  \ifoddpage
    \pdfpageattr{/ArtBox [72 72 216 216]}
  \else
    \pdfpageattr{/ArtBox [216 216 360 360]}
  \fi
}
\begin{document}
\null
%\pdfpageattr{/ArtBox [72 72 216 216]}% directly inserting on each page works
\clearpage
\null
%\pdfpageattr{/ArtBox [216 216 360 360]}% directly inserting on each page works
\end{document}

上述文件提供的 PDF 包含以下内容(无 ArtBox):

2 0 obj
<<
/Type /Page
/Contents 3 0 R
/Resources 1 0 R
/MediaBox [0 0 595.276 841.89]
/Parent 4 0 R
>>
endobj
1 0 obj
<<
/ProcSet [ /PDF ]
>>
endobj
7 0 obj
<<
/Length 0         
>>
stream

endstream
endobj
6 0 obj
<<
/Type /Page
/Contents 7 0 R
/Resources 5 0 R
/MediaBox [0 0 595.276 841.89]
/Parent 4 0 R
>>
endobj

如果我取消注释\pdfpageattr文档正文中的行,我就会得到我想要的结果:

2 0 obj
<<
/Type /Page
/Contents 3 0 R
/Resources 1 0 R
/MediaBox [0 0 595.276 841.89]
/ArtBox [72 72 216 216]
/Parent 4 0 R
>>
endobj
1 0 obj
<<
/ProcSet [ /PDF ]
>>
endobj
7 0 obj
<<
/Length 0         
>>
stream

endstream
endobj
6 0 obj
<<
/Type /Page
/Contents 7 0 R
/Resources 5 0 R
/MediaBox [0 0 595.276 841.89]
/ArtBox [216 216 360 360]
/Parent 4 0 R
>>
endobj

答案1

请注意,您在此处覆盖了 \pdfpageattr 的其他用途,例如 hyperref、tagpdf、fancytoolstips、pdflscape、pdfx。

everypage 将其钩子放在一个组中,因此您需要将设置设为全局。我认为没有必要使用 ifoddpage。

\documentclass{article}
\pdfcompresslevel0
\pdfobjcompresslevel0
\usepackage{everypage}
\makeatletter
\AddEverypageHook{
  \ifodd\c@page
    \global\pdfpageattr{/ArtBox [72 72 216 216]}
  \else
    \global\pdfpageattr{/ArtBox [216 216 360 360]}
  \fi
}
\begin{document}
\null
%\pdfpageattr{/ArtBox [72 72 216 216]}% directly inserting on each page works
\clearpage
\null
%\pdfpageattr{/ArtBox [216 216 360 360]}% directly inserting on each page works
\end{document}

替代方案是 atbegshi:

\documentclass{article}
\pdfcompresslevel0
\pdfobjcompresslevel0
\usepackage{atbegshi}
\makeatletter
\AtBeginShipout{
  \ifodd\c@page
    \global\pdfpageattr{/ArtBox [72 72 216 216]}
  \else
    \global\pdfpageattr{/ArtBox [216 216 360 360]}
  \fi
}
\begin{document}
\null
%\pdfpageattr{/ArtBox [72 72 216 216]}% directly inserting on each page works
\clearpage
\null
%\pdfpageattr{/ArtBox [216 216 360 360]}% directly inserting on each page works
\end{document}

相关内容