You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R生成供pdftk使用的小册子打印重排页面序列?

解决骑马钉小册子PDF重排序列的输出问题

我正在搭建一个跨页显示2页的小册子打印工作流,步骤如下:

  • 使用R生成页面序列
  • 使用pdftk对PDF进行重排
  • 使用lp进行双页小册子打印

需要生成骑马钉(saddle stitch)小册子的PDF重排序列,例如8页小册子的打印序列应为"8 1 2 7 6 3 4 5"。我编写了循环可生成序列,但输出是多行,无法得到单个以空格分隔页码的行;尝试用cat(..., append=TRUE)替代print后,循环直接停止。

解决方案1:先收集序列再统一输出

先把所有页码收集到一个向量中,最后一次性拼接成空格分隔的字符串输出,代码简洁易维护:

p <- 16  # 骑马钉小册子总页数,必须是4的倍数
p2 <- p/2
sequence <- c()

for (i in 1:p2) {
  if (i %% 2 == 0) {
    sequence <- c(sequence, i, p - i + 1)
  } else {
    sequence <- c(sequence, p - i + 1, i)
  }
}

# 输出单个空格分隔的序列行
cat(paste(sequence, collapse = " "), "\n")

解决方案2:循环内直接用cat输出(无需append参数)

cat的append=TRUE参数是用于写入文件时追加内容,控制台输出不需要这个参数。直接在循环里控制输出格式即可:

p <- 16  # 骑马钉小册子总页数,必须是4的倍数
p2 <- p/2

for (i in 1:p2) {
  if (i %% 2 == 0) {
    cat(i, p - i + 1, sep = " ")
  } else {
    cat(p - i + 1, i, sep = " ")
  }
  # 避免最后多输出一个空格
  if (i != p2) {
    cat(" ")
  }
}
cat("\n")  # 最后添加换行符

注意:原代码中的p.seq变量没有实际作用,可以直接删除,通过i本身判断奇偶性即可。

内容的提问来源于stack exchange,提问作者Rain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:47:29