BLOGTIMES
2018/05/13

PDF の JavaScript から WebAPI を叩いてみた

  pdf  javascript 
このエントリーをはてなブックマークに追加

図書の購入のための書類が面倒なので、昨日の昨日の openBD を使ってちょっとしたアプリを書いてみました。

実戦投入するためには指定の書式にあわせる必要があるので、今回はレイアウトの自由度が高いPDF のフォーム機能を使って実装します。

Acrobat の JavaScript の設定はあらかじめこんな感じにしておいてください。
環境設定 - JavaScript - PDF の JavaScript から WebAPI を叩いてみた

まず、PDF の JavaScript はセキュリティの制限で PDF に埋め込まれた JavaScirpt からは HTTP アクセスが使えません。これを回避するためには、Folder Level Scripts という管理者権限がないと配置できないディレクトリに .js ファイルを置くという方法を使います。この制限の詳細については以下のサイトが参考になりました。

具体的な手順としては、以下のディレクトリに以下の .js ファイルを配置しておきます。
# これをやらないと Net.HTTP.request(params); の部分で NotAllowed という例外が発生します。

%ProgramFiles(x86)%\Adobe\(Acrobatのバージョン)\Reader\Javascripts

getInfo.js

//Based on https://kuroeveryday.blogspot.jp/2016/07/key-exists-in-nested-object.html lookup = function _lookup (obj, path) { keys = path.split('.'); for (var k in keys) { key = keys[k]; if (!obj.hasOwnProperty(key)) { return ''; } if (keys.length > 1) { return _lookup(obj[key], keys.splice(1).join('.')); } return obj[key]; } };// lookup getInfo = app.trustedFunction( function(doc, isbn) { var api_url = "https://api.openbd.jp/v1/get?isbn="; app.beginPriv(); var params = { cVerb: "GET", cURL: api_url+isbn, oHandler: { response: function(msg, uri, e) { if(e != undefined) { app.alert("Failed: "+ e); } else { var str = util.stringFromStream(msg, "utf-8") var j = (eval(str))[0]; doc.getField("title").value = lookup(j, "summary.title"); doc.getField("author").value = lookup(j, "summary.author"); doc.getField("publisher").value = lookup(j, "summary.publisher"); var price = lookup(j, "onix.ProductSupply.SupplyDetail.Price.0.PriceAmount"); if ( price ){ price = ((price|0) * 1.08)|0; doc.getField("price").value = price; } } } } }; Net.HTTP.request(params); app.endPriv(); }); // getInfo

あとは、以下のような PDF ファイルからこのパラメーターを呼出してやれば OK。

書籍情報の検索 - PDF の JavaScript から WebAPI を叩いてみた
ちなみに Net.HTTP.request は無料配布されている Adobe Reader からは呼べないようです


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10168
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン