菜单

PDF 处理

相关源文件

本页面介绍了 Stirling-PDF 中的 PDF 处理系统,包括应用程序如何通过原生处理和外部工具集成来处理各种 PDF 操作。它涵盖了用于操作 PDF 文件的核心架构、实用工具、转换能力和变换操作。

核心 PDF 处理架构

Stirling-PDF 的 PDF 处理基于模块化架构,该架构将原生 Java PDF 操作与外部工具集成相结合,以实现专业化操作。

核心 PDF 处理流程图

来源

PdfUtils 类:中央 PDF 处理引擎

`PdfUtils` 类是 Stirling-PDF 中 PDF 处理的中央引擎。它提供了多种 PDF 操作方法,包括

  1. PDF 到图片转换
  2. 图片到 PDF 转换
  3. PDF 元数据处理
  4. 页面操作
  5. 内容检查(文本/图片)
  6. 图片叠加

PdfUtils 中的关键方法

方法目的文件位置
convertFromPdf()将 PDF 页面转换为图片PdfUtils.java129-265
convertPdfToPdfImage()将 PDF 转换为只包含图片的 PDFPdfUtils.java274-294
imageToPdf()将图片转换为 PDFPdfUtils.java313-354
addImageToDocument()将图片添加到 PDF 文档PdfUtils.java357-405
overlayImage()在 PDF 页面上叠加图片PdfUtils.java407-444
textToPageSize()将文本表示转换为 PDRectangle 大小PdfUtils.java43-66
getAllImages()从 PDF 资源中提取所有图片PdfUtils.java68-83

来源

外部进程集成

Stirling-PDF 集成了多种外部工具,用于高级 PDF 处理。`ProcessExecutor` 类管理这些外部进程,提供

  1. 通过信号量进行并发控制
  2. 超时管理
  3. 标准化输出处理

ProcessExecutor 系统图

进程类型和资源限制

`ProcessExecutor` 为不同的外部工具使用不同的信号量限制和超时设置

进程类型目的
LIBRE_OFFICE用于 PDF 到 Office 格式转换
PDFTOHTML用于 PDF 到 HTML 转换
PYTHON_OPENCV用于图片处理操作
WEASYPRINT用于 HTML/URL 到 PDF 转换
TESSERACT用于 OCR 操作
QPDF用于 PDF 优化
CALIBRE用于电子书转换

来源

PDF 转换功能

Stirling-PDF 提供了广泛的 PDF 格式相互转换功能。

PDF 转换流程图

转换为 PDF

  1. 图片到 PDF:

    • 由 `ConvertImgPDFController.convertToPdf()` 处理
    • 使用 `PdfUtils.imageToPdf()` 进行转换
    • 支持多种适应选项和颜色类型
  2. HTML 到 PDF:

    • 由 `ConvertHtmlToPDF.HtmlToPdf()` 处理
    • 使用 `FileToPdf.convertHtmlToPdf()` 和 WeasyPrint
    • 支持 HTML 文件和包含 HTML/CSS 的 ZIP 压缩包
  3. Markdown 到 PDF:

    • 由 `ConvertMarkdownToPdf.markdownToPdf()` 处理
    • 使用 CommonMark 将 Markdown 转换为 HTML
    • 然后使用 WeasyPrint 将 HTML 转换为 PDF
  4. 网站到 PDF:

    • 由 `ConvertWebsiteToPDF.urlToPdf()` 处理
    • 获取网站内容并使用 WeasyPrint 转换为 PDF

从 PDF 转换

  1. PDF 到图片:

    • 由 `ConvertImgPDFController.convertToImage()` 处理
    • 使用 `PdfUtils.convertFromPdf()` 进行转换
    • 支持多种图片格式、颜色类型和 DPI 设置
  2. PDF 到 HTML:

    • 由 `PDFToFile.processPdfToHtml()` 处理
    • 通过 `ProcessExecutor` 使用外部工具 `pdftohtml`
    • 以 ZIP 格式返回 HTML 文件和相关资源
  3. PDF 到 Markdown:

    • 由 `PDFToFile.processPdfToMarkdown()` 处理
    • 通过 `pdftohtml` 将 PDF 转换为 HTML
    • 然后使用 FlexmarkHtmlConverter 将 HTML 转换为 Markdown
  4. PDF 到 Office 格式:

    • 由 `PDFToFile.processPdfToOfficeFormat()` 处理
    • 通过 `ProcessExecutor` 使用 LibreOffice
    • 支持多种格式(DOCX, ODT, PPTX 等)

来源

PDF 变换操作

Stirling-PDF 提供了多种 PDF 变换操作,用于处理现有 PDF。

PDF 变换操作图

页面操作

  1. 删除页面:

    • 由 `RearrangePagesPDFController.deletePages()` 处理
    • 从 PDF 中删除指定页面
  2. 重新排列页面:

    • 由 `RearrangePagesPDFController.rearrangePages()` 处理
    • 支持多种重新排列模式
      • 自定义顺序
      • 反向顺序
      • 双面打印排序
      • 小册子排序
      • 奇偶页拆分与合并
      • 等等
  3. 拆分 PDF:

    • 由 `SplitPDFController.splitPdf()` 处理
    • 根据指定的拆分点将 PDF 拆分为多个文档

PDF 优化

  1. 优化 PDF:
    • 由 `CompressController.optimizePdf()` 处理
    • 实现多种优化技术
      • 使用 `compressImagesInPDF()` 进行图片压缩
      • 集成 QPDF 进行进一步优化
    • 支持不同优化级别与渐进式压缩

来源

实现细节

PDF 到图片转换

`PdfUtils.convertFromPdf()` 中的 PDF 到图片转换过程支持

  1. 单张图片输出(合并所有页面)或多张图片输出(每页一张)
  2. 多种图片格式(JPEG、PNG、TIFF 等)
  3. 不同颜色模式(RGB、灰度、黑白)
  4. 可自定义的 DPI 设置

PDF 到图片转换流程

图片到 PDF 转换

`PdfUtils.imageToPdf()` 中的图片到 PDF 转换过程支持

  1. 多个输入图片
  2. 不同的适应选项(填充页面、保持宽高比、文档适应图片)
  3. 横向图片的自动旋转
  4. 不同颜色类型

图片到 PDF 转换流程

来源

外部工具集成详情

WeasyPrint 集成

WeasyPrint 用于 HTML 和 URL 到 PDF 的转换

  1. HTML 到 PDF 转换

    • `FileToPdf.convertHtmlToPdf()` 处理 HTML 文件或包含 HTML 内容的 ZIP 压缩包
    • 支持 HTML 清理以增强安全性
    • 使用 `ProcessExecutor` 运行 WeasyPrint
  2. URL 到 PDF 转换

    • `ConvertWebsiteToPDF.urlToPdf()` 从 URL 获取内容
    • 验证 URL 格式和可访问性
    • 使用 `ProcessExecutor` 运行 WeasyPrint

LibreOffice 集成

LibreOffice 用于 PDF 到 Office 格式的转换

  • `PDFToFile.processPdfToOfficeFormat()` 处理转换
  • 支持多种输出格式(DOC、DOCX、ODT、PPT、PPTX 等)
  • 使用 `ProcessExecutor` 以无头模式运行 LibreOffice

QPDF 集成

`CompressController` 中使用 QPDF 进行 PDF 优化

  • 作为 `optimizePdf()` 方法的一部分应用
  • 可与图片压缩技术结合使用
  • 通过 `ProcessExecutor` 管理

来源

结论

Stirling-PDF 的 PDF 处理系统通过 Apache PDFBox 将原生 Java PDF 操作与外部工具集成相结合,以实现专业化操作。其架构是模块化的,其中 `PdfUtils` 类作为 PDF 操作的中央实用工具,而 `ProcessExecutor` 则管理外部工具的执行。

该系统支持广泛的 PDF 操作,包括

  • PDF 格式的相互转换
  • 页面操作(重新排列、删除、拆分)
  • 通过图片压缩和 QPDF 集成进行 PDF 优化
  • HTML、Markdown 和 URL 到 PDF 的转换

这种模块化设计使得部署选项更加灵活,并能够在提供统一的 PDF 处理操作界面的同时,利用各种专业工具的优势。