app.pdf - PDF 操作 API
PDF 文件信息获取、文本提取、合并、拆分和图片导出。
基础信息
app.pdf.info(path)
获取 PDF 文件信息。
参数:
path(string) - PDF 文件路径
返回值: table, error - {pageCount, title?, author?, subject?, creator?, keywords?}
local info, err = app.pdf.info("/path/to/document.pdf")
if info then
app.log.info("页数: " .. info.pageCount)
app.log.info("标题: " .. (info.title or "无"))
end
app.pdf.getText(path, page?)
提取 PDF 文本内容。
参数:
path(string) - PDF 文件路径page(number, 可选) - 页码(从 1 开始)。省略则提取所有页面
返回值: string, error
-- 提取全部文本
local text, err = app.pdf.getText("/path/to/document.pdf")
-- 提取第 3 页
local text, err = app.pdf.getText("/path/to/document.pdf", 3)
合并与拆分
app.pdf.merge(paths, outputPath)
合并多个 PDF 文件。
参数:
paths(array) - PDF 文件路径数组(至少 2 个)outputPath(string) - 输出文件路径
返回值: boolean, error
local ok, err = app.pdf.merge({
"/path/to/doc1.pdf",
"/path/to/doc2.pdf",
"/path/to/doc3.pdf"
}, "/path/to/merged.pdf")
app.pdf.split(path, outputDir, range?)
拆分 PDF 文件。
参数:
path(string) - PDF 文件路径outputDir(string) - 输出目录range(string, 可选) - 页面范围(如"1-3,5,7-9",从 1 开始)。省略则每页一个文件
返回值: boolean, error
-- 每页一个文件
app.pdf.split("/path/to/doc.pdf", "/path/to/output/")
-- 生成: doc_page1.pdf, doc_page2.pdf, ...
-- 指定范围拆分
app.pdf.split("/path/to/doc.pdf", "/path/to/output/", "1-3,5,7-9")
-- 生成: doc_1-3.pdf, doc_5.pdf, doc_7-9.pdf
app.pdf.extractPages(path, outputPath, pages)
提取指定页面到新 PDF。
参数:
path(string) - 源 PDF 文件路径outputPath(string) - 输出文件路径pages(string) - 页面范围(如"1-3,5,7-9",从 1 开始)
返回值: boolean, error
app.pdf.extractPages("/path/to/doc.pdf", "/path/to/extract.pdf", "1-5,10")
导出图片
app.pdf.toImages(path, outputDir, opts?)
将 PDF 页面导出为图片。
参数:
path(string) - PDF 文件路径outputDir(string) - 输出目录opts(table, 可选):format(string) - 图片格式:"png"(默认),"jpg","tiff","gif","bmp"dpi(number) - 分辨率(默认 150)pages(string) - 页面范围(如"1-3")。省略则导出所有页面
返回值: boolean, error
-- 导出所有页面为 PNG
app.pdf.toImages("/path/to/doc.pdf", "/path/to/images/")
-- 高分辨率 JPEG,指定页面
app.pdf.toImages("/path/to/doc.pdf", "/path/to/images/", {
format = "jpg",
dpi = 300,
pages = "1-5"
})
示例
PDF 合并工具
function MyPlugin:handleMergePDF(context)
local pdfFiles = {}
for _, file in ipairs(context.selectedFiles) do
if app.path.extension(file) == "pdf" then
table.insert(pdfFiles, file)
end
end
if #pdfFiles < 2 then
app.dialog.alert("提示", "请选择至少 2 个 PDF 文件")
return
end
local outputPath = app.path.join(context.currentDirectory, "merged.pdf")
local ok, err = app.pdf.merge(pdfFiles, outputPath)
if ok then
app.notification.show("完成", "已合并 " .. #pdfFiles .. " 个 PDF")
app.finder.reveal(outputPath)
else
app.dialog.alert("错误", err or "合并失败")
end
end