如何在pdf中添加基于奇数和偶数页的空白页



我想创建相应的pdf文件姓氏字母顺序,然后这个pdf文档将用于双面打印。当创建pdf文件时,应该在姓氏的第一个字母上有分页符,然后在开始下一个字母之前有空白页。如果"A"字母在偶数页上完成打印,则"B"字母可以在下一个奇数页上开始打印。如果"A"字母在奇数页上打印完成,则下一个偶数页应为空白。"B"这封信应该从下一页开始。另一种说法是,每个字母应该在下一个可用的奇数页上开始打印。

我已经尝试了telerik report生成pdf文件,但是在telerik report中,我无法在生成pdf文件时跟踪页码。

您可以从程序中调用PDF工具包pdftk作为外部进程:

使用pdftk.exe yourfile.pdf dump_data,您可以找到包含的页面数。

示例输出:

c:TEXTS>pdftk.exe example.pdf dump_data
InfoKey: Creator
InfoValue:
InfoKey: Title
InfoValue: Citations, mots célèbres 2
InfoKey: Producer
InfoValue: wkhtmltopdf
InfoKey: CreationDate
InfoValue: D:20130904112136+02'00'
NumberOfPages: 5

如果NumberOfPages是奇数,使用如下命令添加一个空页:

pdftk.exe A=yourfile.pdf B=empty_page.pdf cat A B output yourfile_even.pdf

一旦你均匀了所有的文件,你可以将它们连接起来:

pdftk.exe A=a.pdf B=b.pdf C=c.pdf cat A B C output result.pdf

pdftk的最新替代品是开源工具qpdf。

您可以分别生成每个文件,然后在每个文件上运行cpdf -pad-multiple 2 in.pdf -o out.pdf,以便在需要时添加空白页。然后你可以将它们与cpdf 1.pdf 2.pdf 3.pdf ... -o final.pdf合并。

一般使用qpdf或cpdf可执行文件,额外的页面可以根据需要添加,https://stackoverflow.com/a/73575464/10802527然而,从这个问题的语气来看,您希望这样做"inline"在这种情况下,最好不要构建A.pdf B.pdf并在合并前添加单个空白,最好先构建完整的A-Z.pdf,然后根据需要注入空白。

这需要你建立一个个性化的解决方案,你提取页码所以假设没有你的例子

  • A章=第1页
  • B章=第4页
  • C章=第6页
  • D章=第9页

所以你知道你需要在第4页之前注入空白来移动4到5,它会移动6到7所以现在你不需要移动第6页但是第9页现在是第10页所以现在需要在第10页之前注入空白。所以你需要跟踪之前的升降机。

您可以将其编写为一个简单的子例程,以调用其中一个库,该库以数字形式报告页面内容,理想情况下还包括一个空白页插入方法。

在伪代码中你需要2个跟踪器

  • 如果上次注入是偶数,下一个是奇数,反之亦然(触发器)
  • 页面注入是当前+先前空白(增量值)

注意cpdf中JohnWhitington后面的答案在上述情况下,使用
cpdf -pad-before in.pdf 4,9 -o output.pdf

将是最简单的。cpdf将执行第二个移位增量部分,因此4变成5 (&6变成了7),旧的9也会移到11,但是你仍然需要确定触发器状态(奇数或偶数)哪一页前面需要空白

大概你需要

set flag=EVEN
loop NEXT PAGE
if page is last page then exit from loop
is page a section heading ?
then if page odd and flag is ODD save page num and set flag as EVEN and go NEXT PAGE
if page odd and flag is EVEN go next page
if page even and flag is ODD go next page
if page even and flag is EVEN save page num and set flag as ODD and go NEXT PAGE
else page not section heading go NEXT PAGE
  • 1保持标志为EVEN
  • 2,3 .不分段
  • 4为节,为偶数,标志为偶数,保存页数,设置标志为ODD
  • 5不是section
  • 6为节,为偶数,标志为奇数(跳过保存num)
  • 7,8 .不分段
  • 9为分段,为奇数,标志为奇数,保存页数,设置标志为偶数

…等。