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
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。00
weapp-tailwindcssweapp-tailwindcss - bring tailwindcss to weapp ! 把 tailwindcss 原子化思想带入小程序开发吧 !TypeScript00
CherryUSBCherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统(带 USB IP)的高性能 USB 主从协议栈C00