SSブログ
お知らせ

 当ブログは、ブログに割当てられたディスク容量が満杯になったため、2017年1月8日に、続ブログへ移転しました。

 【移転先】
  続・Emi Clockは、どうなったの?
  https://yuna-k.blog.ss-blog.jp/


  RSSフィード
  https://yuna-k.blog.ss-blog.jp/index.xml

※ 60秒後に自動的に続ブログへ移動します。

ひみつのPDFフォーム(その3) [アーキテクトぽい]

※このブログの内容は、アドビ社から公開されている情報に基づき、個人の趣味で記述しています。

PDFフォームが、ローカルファイルから開かれたのか、Webサーバからダウンロードして開かれたのかを調べるには、JavaScriptを使えば簡単にできます。

※OS: Windows 7 Ultimete SP1
※Webブラウザ: IE 8.0, Safari 5.1.5
※PDF表示: Adobe Reader X 10.1.3
※PDF作成: Adobe Acrobat X Pro 10.1.3
※PDFフォーム作成: Adobe LiveCycle Designer ES2 9.0.0

Adobe LiveCycle Designer ES2のScriptエディタでスクリプトを書きます。
 topmostSubform::ready:form - (JavaScript, client)
var schema = util.crackURL(event.target.URL).cScheme;
xfa.host.messageBox("このPDFのURLスキーマは、" + schema + "です。");

LiveCycle Scriptでは、Docオブジェクトは"event.target"で取得します。
Docオブジェクトの"URL"プロパティは、開いているPDFドキュメントのURLです。
"util.crackURL(cURL).cScheme"は、URLのスキーマ部("file", "http", "https")を取得します。

PDFフォームをローカルファイルとして、Adobe Reader X 10.1.3で開くと、セキュリティ警告のメッセージボックスが表示されます。
セキュリティ警告のメッセージボックス

セキュリティ警告のメッセージボックスに対して、「許可」を選択すると、”file”と表示されます。
PDFフォームをローカルファイルとして開いたとき

Adobe Acrobat X Proでも、結果は同じです。

Safari 5.1で、Webサイトへアクセスし、PDFフォームへアクセスすると、”http”と表示されます。
PDFフォームをWebサイトから開いたとき

IE8でも、結果は同じです。

このようなスクリプトを用いて、PDFフォームがローカルファイルから開いたのか、Webサーバから取得して開いたのかを識別することができます。

この記事で使ったPDFフォームは、ここにあります。
 ↓
http://www003.upp.so-net.ne.jp/motosoft/misc/OrderForm104.pdf

[ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)]


PDFフォームが、ローカルファイルから開かれた場合、強制的に閉じるには、JavaScriptを使えば簡単にできます。

Adobe LiveCycle Designer ES2のScriptエディタでスクリプトを書きます。
強制的に開いた文書を閉じるためにjは、"closeDoc(true)"メソッドを使います。
topmostSubform::docReady - (JavaScript, client)
var myDoc = event.target;
var schema = util.crackURL(myDoc.URL).cScheme;
if (schema == "file") {
      myDoc.closeDoc(true);
}
ここで注意すべき点は、closeDoc(true)メソッドで閉じるドキュメントのレンダリングが終わっているイベント処理で実行する点です。
最初の例では、"ready:form" イベントを使いましたが、ここでは、"docReady"イベントを使います。
ただし、"docReady"ということは、もたついていると文書がチラっと見えてしまうため、見せたくなければ、余計なメッセージボックスなどは表示せず、速やかに文書を閉じてください。

ここまでのスクリプトを書けば、JavaScriptが有効であるとするならば、Webサーバへ接続したときには、内容が表示されるが、ローカルファイルへ保存して、Adobe Reader Xなどから開こうとすると、すぐに閉じてしまい、無いような見えないようにすることができます。
このような、トリッキーなスクリプトを、『なんちゃってPDF保存保護』と呼んでいます。
なんとなく、PDFフォームの保存保護ができているかのように見せかける妖術です。

[ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)][ー(長音記号1)]

[ひらめき]なお、ここで紹介しているJavaScriptによる処理は、設定により無効化できます。

Adobe Reader Xのメニューで、「編集」- 「環境設定...」を選び、『環境設定』ダイアログボックスを表示します。
左側の「分類」ペインで「JavaScript」を選び、『Acrobat Scriptを使用』のチェックを外すと、PDFフォーム内に埋め込まれたJavaScriptの実行ができなくなり、JavaScriptによる処理を無効化できます。
JavaScriptを無効化する
JavaScriptを実行させたくない場合には、チェックを外して無効にしておくとよいでしょう。

JavaScriptを無効にしたら、全ての細工が無効化されるので、『なんちゃってPDF保存保護』と呼んでいるのです。

ところで、JavaScriptが無効にされてはPDFフォームの内容が見えず、有効であって初めて閲覧可能にすることができます。
そのお話は、またいつか・・・


[シリーズブログ]
ひみつのPDFフォーム
[1] [2] [3] [4]

タグ:PDF
nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

Facebook コメント

caution.gif当ブログ記事は、日本国著作権法および国際法により権利が保護されています。無断で 画面の写真、ハードコピー、その他の二次複製物を無断で使用することは権利の 侵害になりますのでご注意下さい。
This blog post, right has been protected by copyright law and international law. Without permission screen photo of, hard copy, that you use the other secondary copies without permission is a violation of the rights Please note.
- - - - -
All rights reserved. Copyright (C) Motosoft(Toshi At Kuroneko) 2007-2022.

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。