- blogs:
- cles::blog
« メモ帳が CR+LF 以外の改行コードにやっと対応 :: 鍵が折れた »
2018/05/13

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


図書の購入のための書類が面倒なので、昨日の昨日の openBD を使ってちょっとしたアプリを書いてみました。
実戦投入するためには指定の書式にあわせる必要があるので、今回はレイアウトの自由度が高いPDF のフォーム機能を使って実装します。
Acrobat の JavaScript の設定はあらかじめこんな感じにしておいてください。
まず、PDF の JavaScript はセキュリティの制限で PDF に埋め込まれた JavaScirpt からは HTTP アクセスが使えません。これを回避するためには、Folder Level Scripts という管理者権限がないと配置できないディレクトリに .js ファイルを置くという方法を使います。この制限の詳細については以下のサイトが参考になりました。
- Using trusted functions
- Instructions for Installing Folder Level Scripts (Automation Tools) and Plug-ins
具体的な手順としては、以下のディレクトリに以下の .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。
ちなみに Net.HTTP.request は無料配布されている Adobe Reader からは呼べないようです。
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10168
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
« メモ帳が CR+LF 以外の改行コードにやっと対応 :: 鍵が折れた »
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112145)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110788)
3 . 年次の人間ドックへ(110381)
4 . 2023 年分の確定申告完了!(1つめ)(109928)
5 . 三菱鉛筆がラミーを買収(109828)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110788)
3 . 年次の人間ドックへ(110381)
4 . 2023 年分の確定申告完了!(1つめ)(109928)
5 . 三菱鉛筆がラミーを買収(109828)
cles::blogについて
Referrers