如何用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
相关产品推荐
相关产品推荐

