首页
/ Stirling-PDF多页布局功能:小册子打印与N-up页面设置

Stirling-PDF多页布局功能:小册子打印与N-up页面设置

2026-02-05 04:56:16作者:邬祺芯Juliet

在日常办公中,我们经常需要将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中,通过设置customModeBOOKLET_SORTSIDE_STITCH_BOOKLET_SORT即可启用相应的排序模式,具体参数定义可参考RearrangePagesRequest.java

N-up页面设置功能

N-up页面设置允许将多个PDF页面合并到单个物理页面上,支持2-up、3-up或任意平方数(如4-up、9-up、16-up)的页面布局。

核心实现原理

N-up功能的核心实现位于mergeMultiplePagesIntoOne方法中,主要步骤包括:

  1. 验证页面数量参数
  2. 计算行列布局
  3. 创建新文档和页面
  4. 缩放并排列源页面
  5. 添加可选边框

关键代码片段:

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%纸张。

操作步骤:

  1. 选择"多页布局"功能
  2. 设置pagesPerSheet=4
  3. 启用addBorder=true
  4. 点击处理并下载结果

场景二:制作产品手册

使用骑马钉小册子模式制作24页产品手册:

  1. 选择"页面重排"功能
  2. 设置customMode=SIDE_STITCH_BOOKLET_SORT
  3. 生成排序后的PDF
  4. 打印后沿中线折叠并装订

功能对比与选择建议

功能 适用场景 页数要求 优点
小册子排序 书籍、手册、宣传册 任意(建议为4的倍数) 专业装订效果,翻阅方便
N-up布局 标签、幻灯片、多页资料 任意 灵活节省纸张,支持多种布局
骑马钉排序 小型出版物、报告 4的倍数最佳 适合骑马钉装订,专业印刷效果

选择建议:

  • 制作可翻阅的手册优先选择小册子排序
  • 打印多页资料节省纸张优先选择N-up布局
  • 专业出版物建议使用骑马钉排序

总结与注意事项

Stirling-PDF的多页布局功能通过直观的API设计和高效的算法实现,为用户提供了专业级的PDF排版解决方案。无论是日常办公还是专业出版,都能满足各种复杂的排版需求。

使用时需注意:

  1. 小册子打印前最好预览页面顺序
  2. N-up布局建议根据内容多少选择合适的行列数
  3. 处理大文件时可能需要较长时间,请耐心等待

通过合理使用这些功能,不仅能大幅减少纸张消耗,还能提升文档的专业性和可读性。立即尝试Stirling-PDF的多页布局功能,体验高效环保的文档处理新方式!

官方文档:README.md 开发指南:devGuide/DeveloperGuide.md

登录后查看全文
热门项目推荐
相关项目推荐