概述
decktape-workflow.R
是一个R脚本,用于自动化将reveal.js HTML演示文稿转换为PDF文件。该脚本基于DeckTape工具,提供了批量转换、错误处理和进度显示等功能。
前置要求
Node.js和npm:确保已安装Node.js和npm
DeckTape:全局安装DeckTape工具
npm install -g decktape
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
对象包含以下可配置参数:
<- list(
config # 输入目录
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
。
错误处理
脚本包含完善的错误处理机制:
- DeckTape检查:自动检查DeckTape是否已安装
- 文件验证:验证输入文件是否存在
- 目录创建:自动创建输出目录
- 转换状态:显示每个文件的转换状态
- 错误报告:详细报告转换失败的原因
常见问题
Q: 提示”DeckTape未安装”
A: 请运行 npm install -g decktape
安装DeckTape
Q: 转换超时
A: 可以调整配置中的超时参数:
$decktape_args$page_load_timeout <- 120000 # 增加到2分钟 config
Q: 资源加载失败
A: 确保HTML文件中的图片和资源路径正确,或使用HTTP服务器
Q: 输出文件过大
A: 可以调整截图尺寸:
$decktape_args$screenshots_size <- "1280x720" config
测试脚本
运行测试脚本验证功能:
source("R/test-decktape-workflow.R")
注意事项
- 确保HTML文件完整且包含所有依赖资源
- 转换大文件时可能需要较长时间
- 建议在转换前备份重要文件
- 如果遇到权限问题,可能需要以管理员身份运行R
技术支持
如果遇到问题,请检查: 1. DeckTape是否正确安装 2. HTML文件是否完整 3. 输出目录是否有写入权限 4. 系统资源是否充足