PDFのページ数を調べるスクリプト

クソ忙しい皆様お疲れ様でございます。わたしも絶賛多忙中なので残念なことにAdobeMaxにはいけません。みなさんは是非わたしの分までお楽しみいただけたらと思います。

で、ですね、PDFのページ数に関連するプロパティって存在しませんので色々と難儀するわけなんですが、これは以前PDFファイルのバイナリデータ自体を解析するスクリプトを書いていて、そこそこ役に立っていました。で、現状、何が問題かっていうとIllustratorから書き出したPDFのページ数が抽出出来ないという事がありまして、調べてみるとページ数情報を記述したオブジェクト内のオペランドの順番が標準的なAdobeのライブラリのものと異なるって、ちょっと嫌がらせみたいな感じになっていたというわけでして、これだけに対処するのは簡単な話なんですけど、この機会にリファクタリングっていうものをやってみた次第です。

f = File.openDialog ("select PDF file...");
alert(pdfPageCount(f));


function pdfPageCount(fNm)
{
	if(fNm == null) return -1;
	var f = new File(fNm);
	f.encoding = "Binary";
	if(!f.open("r")) return -1;
	f.seek(0, 0);
	var str = f.read();
	f.close();
	if(!str) return -1;

    var ps = str.match(/<<\/Count\s\d+.+?>>/g);
    if(ps!=null)
    {
        for (var i=0;i<ps.length;i++)
        {
            if (ps[i].indexOf("/Type/Pages")>-1)
            {
                ps = ps[i].match(/<<\/Count\s(\d+)/);
                lim = parseInt(ps[1]);
                if(isNaN(lim)) return -1;
                return lim;
            }
        }
    }

    ps = str.match(/<<.+?\/Type\s\/Pages.+?>>/);
    if(ps!=null)
    {
        ps = ps[0].match(/\/Count\s(\d+)/);
        lim = parseInt(ps[1]);
        if(isNaN(lim)) return -1;
        return lim;
    }

	var ix, _ix, lim;
	ix = str.indexOf("/N ");
	_ix = str.indexOf("/T", ix);
	lim = parseInt(str.substring(ix+3, _ix));
	if(isNaN(lim)) return -1; 
	return lim;
}

以前のものに比べると、ちょっとスッキリした感じです。

実行するとファイル選択ダイアログが出ますのでPDFを選択してください。そのPDFのページ数がアラートされます。

このスクリプトだけではあまり役に立たないのですが、スクリプト実行時にPDFの総ページ数を知りたいケースというのは山程あります。そんな時にこの関数を組み込んで利用すると良いかと思います。

githubからのダウンロードもOKです。

https://github.com/ten-A/Extend_Script_experimentals/blob/master/getPDFPageLength.jsx

また「-1」が返ってくるPDFはページ数を勘定できないやつなんで諦めていただけたらと思います。どうしてもっていう場合は、そのPDFファイルをわたしにください。暇な時に解析して対応できるかどうか考えますです。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする