ささきしき

チラシ

【化石】複数PDFのページ数だけを調べてtxt出力

とりあえずWindows環境限定です。

ぱっと検索したかぎり「VBAでやる」とか「アプリケーションを使う」とかいろいろあったんですが、クソ面倒なのばっか『複数の』PDFファイルを調べて『TXTで出力』するのはお目にかかれず、結局パッチワークでなんとかしてしまった、という話。備忘録。

準備するもの

  • Node
    • fs, path, child_process モジュールを使いますので、つまりそういう感じ。
  • PDFtk

実際のコード

c:\binにファイルを置いて動かしていますので、パス回しとかそんな感じになります。

//list.txt

folder/pdf1.pdf
folder/pdf2.pdf
folder/pdf3.pdf
folder/pdf4.pdf
:
//NumberOfPages.js

const execSync = require('child_process').execSync;
const fs = require('fs');
const path = require('path');

const list = fs.readFileSync(path.resolve(__dirname, 'list.txt'), 'utf8').trim().split(/\r?\n/);
const allIndex = list.length;
let currentIndex = 0;

const parentDir = path.resolve('path/to/pdf-dir/');
const pdftk = path.resolve('../Program Files (x86)/PDFtk/bin/pdftk.exe');
const output = path.resolve(__dirname, 'output.txt');
fs.writeFileSync(output, '', 'utf8');

let result = '';

list.forEach(file => {
    const filePath = path.join(parentDir, file);
    const execResult = execSync(`"${pdftk}" "${filePath}" dump_data | findstr NumberOfPages`).toString();

    const NumberOfPages = execResult.match(/NumberOfPages: (\d{1,})/)[1];

    result += `${file}\t${NumberOfPages}\r\n`
    console.log(`${++currentIndex}/${allIndex}`);
});

fs.writeFileSync(output, result, 'utf8');
# cmd

C:¥bin> node NumberOfPages.js
// (example)_output.txt

folder/pdf1.pdf 9
folder/pdf2.pdf 11
folder/pdf3.pdf 10
folder/pdf4.pdf 22
:

補足

シングルプロセスで同期処理なので遅いっちゃ遅い。 マルチプロセスに非同期で飛ばせば所要時間は減るかもしれんが、そこまでして攻めたい話でもないので富豪プログラミングである。 適当にexec周り差し替えれば他の環境でも動くでしょ(てきとう)。

<!-- 他にも何かあったら書く -->

脱毛との戦い 第NaN日

JSって思ったよりFalsyないね。

ちょっと雑談挟んだら適当に長くなったので畳…むつもりだったんですが、字数1000字もないらしいのでやめました。

前回:

善良で貴重な友人(ただしこのブログを読んでいる)より「脛は比較的痛いよ?」とのお言葉を賜り、なるほどなぁの一言で方針を変更。部位の小ささ、失敗してもお茶の間にゴア表現を晒さずに済むなどの理由でターゲットを腋にする。前回「剃ってからやるべ」とか言ってたけど面倒がって今回はトリマーで適当に刈ってから実行。

改めて観察するに、毛を完全に剃ってしまうと脱毛器のヘッドで掴めず、かといって長いと「髪を何かに挟んだ時」みたいな状態が追加で発生して辛いのと、脱毛器ヘッドの回転軸に絡まって掃除が余計面倒になるということを学んだ。そういえば説明書も「剃ってから1、2日あけてご使用ください」みたいな言い方だった。そういうことね(説明書は読むが従わないパターンの利用者。)

っていうか腋めっちゃ脱毛(剃毛も)しづらくないですか?深い凹みあるし目視できないし。世の腋見せマンは全員これやってるのかと思うとなかなか羨望すら感じますね。やっぱ金払ってプロに任せるんだろうか。

というわけ(?)で、腋の経過を見つつ、脚のほうも諦めてちょっとずつ作業していこうと思います。 今後のシリーズ展望ですが、多分次に1回「痛い!」って言うだけの「第false日」が挟まって、諦めて脚にメスを入れ始めた「第0日」、「第1日」があると思います。膝下(脛)、膝上(腿)、腕、で多分3回くらいは続く予定。なぜか「第◯◯日」って表現にしてしまったが、別に連続的に更新するわけでもないので、「第◯◯回」の方が良かったんじゃないかと今更ながらに思ったりもしますが、面倒なのでこのまま続けます。

需要?知らん!

一年三週

前略

箱庭諸島はじめました」ってブログに起こしてから1年が経ちましたよ、とはてなさんにメールを頂いたので「記念日めっちゃ意識する中学生アベックかよ」と雑感を零しつつ、しかしまァ相方サンがそういうの好きならあーしも構っちゃるかー、とこうして筆をとったりする訳。これぴっぴの甲斐性。

そんなわけで未だに絶賛オープンアルファの「Re:箱庭諸島」(「箱庭諸島SE」ベース)、引き続きどうぞご愛顧いただければ幸いです。

草々不一