Stirling-PDF多页布局功能:小册子打印与N-up页面设置
在日常办公中,我们经常需要将PDF文档进行特殊排版以节省纸张或满足打印需求。无论是制作小册子、会议资料还是多页标签,Stirling-PDF提供的多页布局功能都能轻松实现专业级的打印效果。本文将详细介绍如何使用Stirling-PDF的小册子打印和N-up页面设置功能,让你的文档排版更高效、更环保。
功能概述
Stirling-PDF通过两个核心控制器实现多页布局功能:
- RearrangePagesPDFController:提供小册子打印排序算法,支持多种页面重排模式
- MultiPageLayoutController:实现N-up页面合并,支持2、3或任意平方数的页面合并
这两个控制器的源代码分别位于:
小册子打印功能详解
小册子打印(Booklet Printing)是一种将文档页面重新排序,以便折叠装订成小册子的排版方式。Stirling-PDF提供了两种小册子排序算法:基础小册子排序和骑马钉小册子排序。
基础小册子排序算法
基础小册子排序算法将页面按照"最后一页、第一页、第二页、倒数第二页..."的顺序排列,源代码实现如下:
private List<Integer> bookletSort(int totalPages) {
List<Integer> newPageOrder = new ArrayList<>();
for (int i = 0; i < totalPages / 2; i++) {
newPageOrder.add(i);
newPageOrder.add(totalPages - i - 1);
}
return newPageOrder;
}
骑马钉小册子排序
对于需要骑马钉装订的小册子,Stirling-PDF提供了更专业的排序算法,每4页为一组进行重组:
private List<Integer> sideStitchBooklet(int totalPages) {
List<Integer> newPageOrder = new ArrayList<>();
for (int i = 0; i < (totalPages + 3) / 4; i++) {
int begin = i * 4;
newPageOrder.add(Math.min(begin + 3, totalPages - 1));
newPageOrder.add(Math.min(begin, totalPages - 1));
newPageOrder.add(Math.min(begin + 1, totalPages - 1));
newPageOrder.add(Math.min(begin + 2, totalPages - 1));
}
return newPageOrder;
}
使用场景与效果
小册子打印适用于多种场景:
- 制作产品手册或宣传册
- 打印会议资料,便于翻阅
- 制作小型书籍或报告
在Stirling-PDF中,通过设置customMode为BOOKLET_SORT或SIDE_STITCH_BOOKLET_SORT即可启用相应的排序模式,具体参数定义可参考RearrangePagesRequest.java。
N-up页面设置功能
N-up页面设置允许将多个PDF页面合并到单个物理页面上,支持2-up、3-up或任意平方数(如4-up、9-up、16-up)的页面布局。
核心实现原理
N-up功能的核心实现位于mergeMultiplePagesIntoOne方法中,主要步骤包括:
- 验证页面数量参数
- 计算行列布局
- 创建新文档和页面
- 缩放并排列源页面
- 添加可选边框
关键代码片段:
int cols = pagesPerSheet == 2 || pagesPerSheet == 3 ? pagesPerSheet : (int) Math.sqrt(pagesPerSheet);
int rows = pagesPerSheet == 2 || pagesPerSheet == 3 ? 1 : (int) Math.sqrt(pagesPerSheet);
float cellWidth = newPage.getMediaBox().getWidth() / cols;
float cellHeight = newPage.getMediaBox().getHeight() / rows;
for (int i = 0; i < totalPages; i++) {
// 计算当前页面位置
int adjustedPageIndex = i % pagesPerSheet;
int rowIndex = adjustedPageIndex / cols;
int colIndex = adjustedPageIndex % cols;
// 计算缩放比例
float scaleWidth = cellWidth / rect.getWidth();
float scaleHeight = cellHeight / rect.getHeight();
float scale = Math.min(scaleWidth, scaleHeight);
// 绘制页面
contentStream.saveGraphicsState();
contentStream.transform(Matrix.getTranslateInstance(x, y));
contentStream.transform(Matrix.getScaleInstance(scale, scale));
PDFormXObject formXObject = layerUtility.importPageAsForm(sourceDocument, i);
contentStream.drawForm(formXObject);
contentStream.restoreGraphicsState();
}
支持的布局模式
Stirling-PDF的N-up功能支持以下布局模式:
- 2-up(2页/行)
- 3-up(3页/行)
- 4-up(2x2网格)
- 9-up(3x3网格)
- 16-up(4x4网格)
- 其他平方数布局
边框设置
用户可以选择为合并后的页面添加边框,增强页面分隔效果:
if (addBorder) {
float borderX = colIndex * cellWidth;
float borderY = newPage.getMediaBox().getHeight() - (rowIndex + 1) * cellHeight;
contentStream.addRect(borderX, borderY, cellWidth, cellHeight);
contentStream.stroke();
}
实际应用示例
场景一:会议资料打印
将20页的会议资料以4-up(2x2)模式打印,只需5张纸即可容纳所有内容,配合双面打印可进一步节省50%纸张。
操作步骤:
- 选择"多页布局"功能
- 设置pagesPerSheet=4
- 启用addBorder=true
- 点击处理并下载结果
场景二:制作产品手册
使用骑马钉小册子模式制作24页产品手册:
- 选择"页面重排"功能
- 设置customMode=SIDE_STITCH_BOOKLET_SORT
- 生成排序后的PDF
- 打印后沿中线折叠并装订
功能对比与选择建议
| 功能 | 适用场景 | 页数要求 | 优点 |
|---|---|---|---|
| 小册子排序 | 书籍、手册、宣传册 | 任意(建议为4的倍数) | 专业装订效果,翻阅方便 |
| N-up布局 | 标签、幻灯片、多页资料 | 任意 | 灵活节省纸张,支持多种布局 |
| 骑马钉排序 | 小型出版物、报告 | 4的倍数最佳 | 适合骑马钉装订,专业印刷效果 |
选择建议:
- 制作可翻阅的手册优先选择小册子排序
- 打印多页资料节省纸张优先选择N-up布局
- 专业出版物建议使用骑马钉排序
总结与注意事项
Stirling-PDF的多页布局功能通过直观的API设计和高效的算法实现,为用户提供了专业级的PDF排版解决方案。无论是日常办公还是专业出版,都能满足各种复杂的排版需求。
使用时需注意:
- 小册子打印前最好预览页面顺序
- N-up布局建议根据内容多少选择合适的行列数
- 处理大文件时可能需要较长时间,请耐心等待
通过合理使用这些功能,不仅能大幅减少纸张消耗,还能提升文档的专业性和可读性。立即尝试Stirling-PDF的多页布局功能,体验高效环保的文档处理新方式!
官方文档:README.md 开发指南:devGuide/DeveloperGuide.md
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00