37 lines
1.1 KiB
TypeScript
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();
|