pdf-tools/tools/listFormFields.ts

37 lines
1.1 KiB
TypeScript

import { forceArgs } from "../cli/forceArgs.ts";
import { cliAlert } from "../cli/prompts.ts";
import { TerminalBlock } from "../cli/TerminalLayout.ts";
import { loadPdfForm } from "util/saveLoadPdf.ts";
import type { ITool } from "../types.ts";
export class ListFormFields implements ITool {
name = "listformfields";
description = "Lists fields in a PDF form";
block?: TerminalBlock;
async run(pdfPath: string = "") {
if (!this.block) {
this.block = new TerminalBlock();
}
this.block.setPreserveHistory(true);
[pdfPath] = await forceArgs([pdfPath], [[
"Please provide path to PDF:",
(p) => !!p && p.endsWith(".pdf"),
]], this.block);
const form = await loadPdfForm(pdfPath);
const fields = form.getFields();
const fieldNames = fields.map((f) => f.getName());
const lines = [];
for (const fieldName of fieldNames) {
lines.push(fieldName);
}
this.block.setLines(lines, [0, 1]);
await cliAlert("", this.block);
}
setBlock(terminalBlock: TerminalBlock) {
this.block = terminalBlock;
}
}
export default new ListFormFields();