PDFからテキスト情報を取得
する方法は何通りかある
/icons/javascript.icon
改行をうまく認識できないのが欠点
各文字の座標が渡されるだけ
改行を表現するには、座標を解析しないといけない
viewer経由なら取り出せる
テキストのみ取得するコード
code:js
await (async () => {
async function* readPages() {
let index = 0;
while (true) {
const page = PDFViewerApplication.pdfViewer._pagesindex; if (!page) break;
page.div.scrollIntoView();
yield await new Promise((resolve) => {
const timer = setInterval(() => {
// 読み込みが終わるまで待つ
const canvas = page.div.getElementsByTagName("canvas")?. 0; if (!canvas) return;
if (page.div.getElementsByClassName("loadingIcon").length > 0) return;
clearInterval(timer);
// 描画を待ってから返す
setTimeout(() => {
const text = page.textLayer.textContentItemsStr?.join?.("\n") ?? "";
resolve({
canvas,
text
});
}, 2000);
}, 100);
});
index++;
}
}
const pages = [];
for await (const {
text
} of readPages()) {
pages.push(text);
}
const zipBlob = await zip.generateAsync({
type: "blob",
compression: "DEFLATE",
compressionOptions: {
level: 9,
},
});
const a = document.createElement("a");
type: "application/json"
}));
const title = document.title.replace?.(/\.pdf$/, "");
a.download = ${title}.json;
document.body.append(a);
a.click();
a.remove();
})();
Linux terminal
$ pdftotext input.pdf
input.pdfに書き込まれている全てのテキストがinput.txtに書き込まれる
input.txtは同階層のdirectoryに出力される
$ pdftotext input.pdf output.txt
出力fileの名前/pathを変えたいときはこっち
2から5ページ目のテキストだけ取り出したいときはpdftotext -f 2 -l 5 input.pdfを実行する
改行をうまく認識してくれる
References