DeckTape自动化工作流使用说明

使用decktape将reveal.js HTML演示文稿转换为PDF文件的自动化工作流使用说明。
Reveal
作者

胡华平

发布于

2025年9月5日

概述

decktape-workflow.R 是一个R脚本,用于自动化将reveal.js HTML演示文稿转换为PDF文件。该脚本基于DeckTape工具,提供了批量转换、错误处理和进度显示等功能。

前置要求

  1. Node.js和npm:确保已安装Node.js和npm

  2. DeckTape:全局安装DeckTape工具

    npm install -g decktape
  3. R包依赖

    • here:路径管理
    • fs:文件系统操作
    • glue:字符串插值
    • cli:命令行界面

安装R包依赖

install.packages(c("here", "fs", "glue", "cli"))

主要功能

1. 转换单个文件

# 转换单个HTML文件
convert_html_to_pdf("_site/slide/slide-reveal/chpt01-introduction.html")

# 指定输出目录
convert_html_to_pdf("_site/slide/slide-reveal/chpt01-introduction.html", 
                   output_dir = "custom/output")

# 覆盖已存在的文件
convert_html_to_pdf("_site/slide/slide-reveal/chpt01-introduction.html", 
                   overwrite = TRUE)

2. 批量转换

# 批量转换所有reveal.js文件
batch_convert_reveal()

# 自定义输入输出目录
batch_convert_reveal(
  input_dir = "_site/slide/slide-reveal",
  output_dir = "output/pdf",
  overwrite = FALSE,
  verbose = TRUE
)

3. 快速转换项目文件

# 快速转换当前项目的所有reveal.js文件
convert_project_slides()

# 覆盖已存在的文件
convert_project_slides(overwrite = TRUE)

配置参数

脚本中的config对象包含以下可配置参数:

config <- list(
  # 输入目录
  input_dir = "_site/slide/slide-reveal",
  
  # 输出目录
  output_dir = "output/pdf",
  
  # DeckTape参数
  decktape_args = list(
    framework = "reveal",
    chrome_args = "--allow-file-access-from-files",
    load_pause = 3000,
    page_load_timeout = 60000,
    screenshots_size = "1600x900"
  ),
  
  # 文件过滤
  file_pattern = "\\.html$",
  
  # 其他选项
  overwrite = FALSE,
  verbose = TRUE
)

使用步骤

步骤1:准备HTML文件

确保您的reveal.js HTML文件已经生成并位于正确的目录中:

# 使用Quarto渲染reveal.js文件
quarto render slide/slide-reveal/

步骤2:加载脚本

# 加载工作流脚本
source("R/decktape-workflow.R")

步骤3:执行转换

# 方法1:快速转换(推荐)
convert_project_slides()

# 方法2:自定义转换
batch_convert_reveal(
  input_dir = "_site/slide/slide-reveal",
  output_dir = "output/pdf"
)

输出结果

转换完成后,脚本会显示详细的统计信息:

转换完成
总计:5 个文件
成功:4 个文件
跳过:1 个文件
失败:0 个文件

PDF文件将保存在指定的输出目录中,文件名与原始HTML文件相同,但扩展名为.pdf

错误处理

脚本包含完善的错误处理机制:

  1. DeckTape检查:自动检查DeckTape是否已安装
  2. 文件验证:验证输入文件是否存在
  3. 目录创建:自动创建输出目录
  4. 转换状态:显示每个文件的转换状态
  5. 错误报告:详细报告转换失败的原因

常见问题

Q: 提示”DeckTape未安装”

A: 请运行 npm install -g decktape 安装DeckTape

Q: 转换超时

A: 可以调整配置中的超时参数:

config$decktape_args$page_load_timeout <- 120000  # 增加到2分钟

Q: 资源加载失败

A: 确保HTML文件中的图片和资源路径正确,或使用HTTP服务器

Q: 输出文件过大

A: 可以调整截图尺寸:

config$decktape_args$screenshots_size <- "1280x720"

测试脚本

运行测试脚本验证功能:

source("R/test-decktape-workflow.R")

注意事项

  1. 确保HTML文件完整且包含所有依赖资源
  2. 转换大文件时可能需要较长时间
  3. 建议在转换前备份重要文件
  4. 如果遇到权限问题,可能需要以管理员身份运行R

技术支持

如果遇到问题,请检查: 1. DeckTape是否正确安装 2. HTML文件是否完整 3. 输出目录是否有写入权限 4. 系统资源是否充足