ちょっと作ってみたツール

SEを10年くらいやっていました。あったら便利だなーってツールを書いています

フォルダ配下のwordファイルをpdf化する

使い方

  1. 下のソースを適当な名前で保存する(ここではexportpdf.js)
  2. コマンドプロンプトから下記のように実行
cscript exportpdf.js (wordが格納されているフォルダ) (PDFを出力するフォルダ)

ソース

var prop = {
    'ExportFormat': 17,       // 出力するファイルのフォーマット PDF:17, XPS:18
    'OpenAfterExport':false, // 変換後、変換されたファイルを開くかどうか
    'OptimizeFor':1,         // 印刷用に最適化(0)にするか、画面用に最適化(1)するか
    'Range':0,               // エクスポートする範囲を全体(0)にするか選択したページ(1)か、
                                 // 現在のページ(2)か、FromとToで指定するか(3)
    'From': 1,               // Rangeで3を指定したときの開始ページ
    'To':   2,               // Rangeで3を指定したときの終了ページ
    'Item': 0,               // エクスポート時テキストのみ(0)を含めるか、テキストをマークアップ付き(7)で含めるかを指定する 
    'IncludeDocProps': false,// 新しいファイルに文書のプロパティを含めるかどうか
    'KeepIRM':false,         // ソース文書が IRM によって保護されている場合に、IRM アクセス許可を XPS 文書にコピーする場合は true。
    'CreateBookmarks':2,     // ブックマークを出力しないか(0)、見出しのみ(1)か、ヘッダやフッタなども含むか(2)
    'DocStructureTags':false,// コンテンツのフローや論理構成など) を含める場合は true
    'BitmapMissingFonts':false, // テキストのビットマップを含める場合は true。テキスト フォントを参照する場合は false。
    'UseISO19005_1': true,      // PDF の使用を ISO 19005-1 として標準化されている PDF のサブセットに限定する場合は true
    'ShowRevisionsAndComments': false, // 書内の変更履歴およびコメントを表示(true)、非表示(false)
    'RevisionsView': 0          // 表示する画面を最終版(0)にするか、初版(1)にするか 
};

if ( WScript.arguments.length != 2 ) {
    WScript.Echo("arguments: InputFolder, OutputFolder");
    WScript.Quit();
}

var fso = new ActiveXObject("Scripting.FileSystemObject");
var word = new ActiveXObject("Word.Application");
var inputBase  = fso.GetAbsolutePathName(WScript.arguments.Item(0));
var outputBase = fso.GetAbsolutePathName(WScript.arguments.Item(1));

var inputReg = new RegExp("^" + inputBase);

makeWalker(getChildren, func)(inputBase);

function fileFunc(file) {
    var output = file.replace(inputBase, outputBase);
    
    if (fso.GetExtensionName(file).match(/(doc|docx)$/i)) {
        var doc = null;
        output = output.replace(/(doc|docx)$/i, "pdf");
        try {
            doc = word.Documents.Open(file);
            doc.Windows.Item(1).View.RevisionsView = prop['RevisionsView'];
            //doc.Windows.Item(1).View.ShowRevisionsAndComments  = prop['ShowRevisionsAndComments '];
            
            doc.ExportAsFixedFormat (
                output, prop['ExportFormat'],
                prop['OpenAfterExport'], prop['OptimizeFor'],
                prop['Range'], prop['From'], prop['To'],
                prop['Item'],  prop['IncludeDocProps'], 
                prop['KeepIRM'], prop['CreateBookmarks'],
                prop['DocStructureTags'], prop['BitmapMissingFonts'],
                prop['UseISO19005_1']
            );
            
        } finally {
            if (doc) { doc.Close() }
        }
    }
}

function folderFunc(folder) {   
    var output = folder.replace(inputBase, outputBase);
    if (!fso.FolderExists(output)) {
        fso.CreateFolder(output);
    }
}

function func(node) {
    if (fso.FolderExists(node)) {
        folderFunc(node);
    } else if (fso.FileExists(node)) {
        fileFunc(node);
    }
}

function getChildren(node) {
    var children = [];
    if (fso.FolderExists(node)) {
        for (var e = new Enumerator(fso.GetFolder(node).SubFolders); !e.atEnd(); e.moveNext()) {
            children.push(e.item().Path);
        }
        for (var e = new Enumerator(fso.GetFolder(node).Files); !e.atEnd(); e.moveNext()) {
            children.push(e.item().Path);
        }
    }
    return children;
}

function makeWalker(getChildren, func) {
    return function walk(node) {
        func(node);
        var children = getChildren(node);
        for ( var i = 0; i < children.length; i++) {
            walk(children[i]);
        }
    }
}