PDFとたわむれる

PDFとたわむれる感じで飽きるまで不定期更新blog

PriMore改造中、文書情報がAdobeReaderで10以上で文字化けしませんか?

2013-03-31 | Weblog
超久々の更新です。

PriMoreについて、コピペ不使用のアイディアを達也さんに頂いて
放置してしまっていましたが、達也さん自身が修正版を公開されました。

http://page.freett.com/t2255/PriMore.html

ソースを公開してよかった。。

と思って見たら私のソースの酷いこと、、

一念発起して、リファクタリングしてインストーラでも作ろう作業して
リファクタリングまでしたら、AdobeReaderで文書のプロパティが文字化けしてる!!

Foxitでは文字化けしてないし原因不明。

AdobeReder9まではうまくいっていたような気がしますが、10,11ではだめですね。

しおりについては文字化けしないんで、文章のタイトルとかの読み込みが
PDF自体の定義⇒XMPの順だったのが、XMP⇒PDF自体にかわったのかもしれませんね。

PDF自体の定義は、PDFDocEncodingで記載することで問題ないはずなんですが、
XMPにもそのままコピーされているので、これがまずい(今になって化けるようになった)原因かもしれませんね。

http://ghostscript.com/doc/current/Ps2pdf.htm

-sDSCEncoding=string

にそれらしいことが書いてありますが、PrimoPDFで、PS2pdfを直接叩いているわけじゃないのでよくわからない。。

BullZipでは問題ないの解決方法がありそうな気もしますが。。。

PDFフォームの入力情報を、保存するAdobeReader用のアドイン公開!

2010-02-07 | Weblog
前回『PDFフォームの入力情報は、保存する事が出来ない?』として
PFDフォームについて取り上げましたが、そのAdobeReaderの制約を回避する
アドオンを作りましたので紹介します。
(と言っても、ライセンス違反とかではありませんよ)

『komikoni FormBakup v1.0』

http://www.ne.jp/asahi/hey.to/expo/pdf/FormBackup.js.txt


※導入方法は一番下

■ツールバー表示状態(画像1)


■XFDF表示状態(画像2)


■使い方

使い方は、フォームの含まれるPDFを開き
フォーム情報に何らかの入力を行った後、ツールバーに表示されている「FormBakup」をクリック



出現したダイアログの中のテキストボックスに
表示されるXFDFをクリップボードにコピーする。



これをメモ帳などに貼り付け



拡張子を「○○.xfdf」
文字コード「UTF-8」にして
PDFファイルと同じ場所に保存します。



これで保存完了です。
保存したXFDFファイルを開くと



ちゃんと、XFDF保存時に読み込まれた上でPDFが開かれます。



■XFDFの中身

XFDFは、XMLファイルですので中身を見れば
なんとなく分かると思います。



仕様もそれほど複雑ではなく
無料で公開されているんでそちらも見てみて下さい。
(XFDFにAnnotation(注釈やコメント)を記載できますが、
AdobeReaderでは読み込めませんw注意して下さい)

■導入方法

以前に公開した、PDFとJavaScriptについて4_『PopupBookmark』と同じなんですが、

まずは以下のURLのJavaScriptをダウンロード


http://www.ne.jp/asahi/hey.to/expo/pdf/FormBackup.js.txt


ダウンロードした”FormBackup.js.txt”を
C:Documents and Settings%USERNAME%Application DataAdobeAcrobat8.0JavaScripts
に保存し”FormBackup.js”にリネイム
(Macは/Library/Acrobat User Data/8.0_x86/JavaScripts)
(AdobeReader 9は・・似たような場所です・・今のマシンが8なので今度書きます)

後はAdobeReaderを起動し

・表示⇒ツールバー⇒その他ツールバーで『アドオンツールバー』を追加しツールバー上での”FormBackup”をクリック!

又は

メニューでツール⇒FormBackup

又は
キーボードで ALT + T ⇒ F

という感じです。

感想・質問などコメント頂けると嬉しいです。

PDFフォームの入力情報は、保存する事が出来ない?

2010-02-07 | Weblog
どうも、PDFにはフォーム機能というものがあり
申請書などで必要項目をAdobe Reader等で入力して
印刷又はサーバに送信することが出来ます。

それほど普及しているとは思えませんが、
オフラインで使える事や、PDFの機能のため
印刷レイアウトと同一な状態で表示事が出来るので
結構便利かもしれません。
既に使われている方も居るかも知れませんね。
(ちなみに私は仕事で使ったことが有りませんw)

で、想像力を広げて色々使い方を考えるとAdobeらしいこんな↓ネックがw



フォームが含まれるPDFファイルをAdobe Readerで開いた時の警告です。
そうなんです、入力内容を保存する事が出来ないんです。
もちろん印刷は出来ますし、(ちゃんと設定すれば)サーバーに
送信する事は出来るんですが、Adobe Reader上で保存する事は出来ないんです。
これはかなり不便で「Acrobatを買えば…」ていうパターンですが
結局PDFフォームの使用を断念する要因なっている気がします。

フォームの入力情報を外部保存するフォーマットとしては
FDF(Forms Data Format)もしくはXML化したXFDF(XML Forms Data Format)というものがあり、動的なPDF表示を
実現する際に動的な情報はFDFで都度作成し、固定情報をPDFで
作成するなんて事が出来ます。
Adobe Readerでは、このFDFからPDF上に入力情報を読み込ん事は
出来るんですが、FDFに保存する事は出来ないという事です。

FDFに限らず、Adobe ReaderのI/O系の処理はほとんど認められていないんで
しょうがない事なんですが、せっかくの機能を潰してる気がしますね。
(※最近は、Adobeの有料製品で特別な情報を付与した
PDFについてはAdobe Readerでも出来たりします)

という事で、そんな規制の中でもFDFに保存できるようにしよう!
というのを・・・次の投稿で書きます。

ちなみに、Adobe Readerの対抗の無料のPDFソフト
『PDF-XChange Viewer』では、FDFのエキスポートが出来ます。

PriMoreソースコード公開

2010-02-07 | Weblog
PriMoreはVBScriptで動いていますが今まで難読化した上で公開しておりましたが、多忙につき今後もなかなかメンテナンス出来ないと思うので、ソースを公開します。

VBScriptですのでVBAをやったことが有る方であれば、書き換える事は
出来ると思いますので、自分の好みに書き換えて使って下さい。
(とは言ってもPostScriptとPDFMarkがどんなものか知らないと書き換えは難しいかも知れません)

■PriMore V4.22 (PrimoPDF V4.x用)ソースコード
http://www.ne.jp/asahi/hey.to/expo/pdf/PriMoreV4.22.vbs.txt



■PriMore V0.85 (PrimoPDF V3.x用)ソースコード
http://www.ne.jp/asahi/hey.to/expo/pdf/PriMoreV0.85.vbs.txt


※拡張子は.txtにしているのでDL後に.vbsに戻して下さい。


それなりに綺麗に作ったつもりですが、
構造自体が複雑なんで下で軽く解説します。
(すでに、自分自身が構造を忘れているんですがw)

なにかあればコメントして下さい。

■PrimoPDF自体の処理の流れについて

PrimoPDFは擬似的なプリンターであり
他の無料のPDF化ソフトと同様でスプールを
PS(PostScript)ファイルに変換してその後にPDF化します。
図にすると

spoolsv.exe==>primorun.exe==>primopdf.exe
     └→spool┘   └→PS file┘   └→PDF file

・spoolsv.exe …プリントスプーラー
・primorun.exe …スプールからPSファイルを作成
・primopdf.exe …GUIで細かい設定を行ってPSファイルからPDFファイルを作成


です。

■PriMoreを導入した場合の流れについて

中間で作られるPSファイルを読み取り
日本語タイトルを取得しGUIでデフォルト表示するPDFのファイル名が
正しく日本語になるように設定します。
また、導入前は一度の印刷で必ず一つのPDFファイルですが、
複数回の印刷を一つのPDFファイルにまとめる事が
作成出来るようにしています。

図にすると

◇1度目の印刷
spoolsv.exe==>primorun.exe==>primore.vbs(1)==>primore.vbs(2)
    └→spool┘   └→PS file┘  └→PS file┘
◇2度目以降の印刷
spoolsv.exe==>primorun.exe==>primore.vbs(1)
└→spool┘  └→PS file┘   └→PS file

◇まとめてPDF化
primore.vbs(2)==>primopdf.exe
└→PS file┘    └→PDF file

・primore.vbs(1)…一回目の場合、自己呼び出しして
primore.vbs(2)の終了を待たずにて終了
・primore.vbs(2)…GUIのprimopdf.exeを起動する。

です、複数回印刷でPSファイルが作られるように
プロセスの繋がりを切っています。これは、PrimoPDFは
印刷してGUIを表示してPDFが作成されるまで、次の印刷は待ち状態
になってしまう為です。

■PriMore V0.85 (PrimoPDF V3.x用)の日本語対応

PSファイルにはスプールから送られてくるタイトルが「%%Title」
に記載されているが、日本語が含まれると8進数又は16進数で
エンコードされていて、GUIのprimopdf.exeが「%%Title」をそのまま
表示する為、デフォルトのファイル名として日本語が表示されません。

PriMoreでは、「%%Title」を先に読み取ってデコードした上で
「%%Title」に日本語(S-JIS)で書き戻しています、これをprimopdf.exeが読み取る事で
ファイル名として日本語表示されるようにしています。
ただこれだけだと、PDF自体のタイトルは文字化けしたままなの
PSファイルにPDFMarkで日本語タイトルをPDFdocencodingで追記してます。
なお、PDF化の際には「%%Title」よりPDFMarkのタイトルが優先されます。
また、複数の印刷時のタイトルをしおりとしてPDFMarkで追記しています。

■PriMore V4.22 (PrimoPDF V4.x用)の日本語対応

PrimoPDF3.0と異なり、primopdf.exeが「%%Title」を読み取る際に
英字以外が含まれるとエラーになってしまうため、「%%Title」を
"hoge"と書き換えて起動したGUI画面をSendKeyとクリップボード経由で
書き換えて日本語表示されるようにしています。
(こんな方法しかないんです…)

PDFリファレンス第2版を買った

2009-05-23 | Weblog
日本語での唯一の解説本である『PDFリファレンス第2版』を買いました。
http://www.amazon.co.jp/PDF%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E7%AC%AC2%E7%89%88%E2%80%95Adobe-Portable-Document-Format-Version/dp/4894713381

今まで、読んでみたかったんですが、7000円もするんで躊躇してました。
Amazoneの中古で半額で出てたので衝動買いw

もうかなり前の書籍ですがPDFを知るためには
有効な本と言えるんじゃないでしょうか

Bullzip日本語文書情報用のアドインを更新

2009-05-14 | Weblog
『Bullzip PDFでタイトルや題名などのPDF文章情報に日本語が使えるようにするアドイン』として公開していたアドインを更新しました。

mtsowさんからハイフン"-"が有るとエラーが発生するとの指摘を頂きました。

この問題はアドインの問題と言うよりBullzip自身の問題で
BullzipはPrimoPDFと違って内部でいろんなやってるんですが
Titleに2Byte文字が含まれる場合PS上エンコードされている
必要が有るんですが、(たぶん理由があって)行っておらず
特定の2Byte文字があると下記のようなSyntaxErrorになります。



これを解消するような機能をアドインに追加しました。

実際にはContext("Config")("title")=""等で元の設定を
クリアしているだけです(アドインで読み取った後にクリアしている)
これによってPS上のTitle等は空白となりますが
アドインでエンコードした上でPDFMarkとして追記しているので問題有りません。

ダウンロード

上記をダウンロードしてMacroフォルダ上のファイルを上書きして下さい。

なにか有ればコメントして下さい。

近況

2009-04-28 | Weblog
説明書き通りとは言え全然更新してませんでした。

プログラミングコンテストやら資格試験やら仕事やらで
pdfで遊ぶ時間がなかったもので全然更新してませんでした。
pdfに限ったBlogって自分で制限しちゃって書きにくいってのもありますが・・・
(コンテストは優勝し資格試験も受かりました)

でBullzipなんですが、ぱっやり便利ですね
PostScript経由でのPDF作成なんてどれも変わんないと
考えがちですが、インターフェイスが色々考えられてて
PDFファイルを一括で処理したい時に色々出来ますね。

しおり(bookmark)を追加したりWeb最適化(Linearize)したり
自分で機能を増やせるのが面白ですね。

雑談でした~

PrimoPDF v4用 PriMore 微修正でV4.20⇒V4.22にアップデート

2009-02-25 | Weblog
初トラックバックでご指摘頂いた、禁止文字が
ファイル名として使われる点について修正しました。

ファイル名に使えない「? : , ; * " < > |」は「 _ 」に置換しました。
""はドキュメント名からファイル名を検知する際の区切り文字なので
置換不要でした。

これでIEなどからPrimoPDFに印刷した際に
"http://www.google.co.jp/webhp?hl=ja&tab=nw"
なら
"webhp_hl=ja&tab=nw"
となります。

ファイルは以下からダウンロードしてください。
PriMore4.22.zip

ファイルを入れ替えるだけでOKです。

※2/25に公開したv4.21にて、windows2000でエラーとなるとの
一報を頂いたので微妙に変更しv4.22に差し替えました。
⇒原因は今回の修正とは直接関係なかった為v4.21とv4.22
 どちらでも問題なく動くと思われます。

PrimoPDF v4用 PriMore再公開 (誤検出しません!!)

2009-02-04 | Weblog
PrimoreはPrimoPDFで足りない日本語対応度を上げるアドオンです。

仕組み上誤検出される事が多かった為公開を停止していましたが
配布方法を変更し、PrimoPDFv4用のPriMore再公開します。
(待たれていた方はお待たせしてすいません PrimoPDFv3.x用はまだです)

ファイルは以下からダウンロードしてください。
PriMore4.20.zip

使い方が少し変わりましたのでご注意下さい。
ツールが、PriMoreV4.exeでは無くPriMoreV4.vbeとなった為
プリンタの設定を『Cscript.exe "C:\Program Files\activePDF\PrimoPDF\PriMoreV4.vbe"』に変更して下さい。

詳しい使い方はReademe又は以前の記事(更新済み)をご覧下さい。
PrimoPDF v4用 PriMore公開


PDFとJavaScriptについて6 任意のPDFを開く際に常にサムネイルを表示するには?

2009-02-02 | Weblog
任意のPDFを開く際に常にサムネイルを表示するには?
という事で個別のPDF自体の設定とは無関係に常にサムネイルを表示する方法です。
少々強引ですが・・SNSで質問されている方が居たので作ってみました。

↓こちらからダウンロードしてください。
AdobeReader用アドオン InitShowThumbnailsV1.0
(v7以降用です・・・・Acrobatでも動くはずです。テストはReader8(win)のみです)





インストール?は

ダウンロードした”InitShowThumbnails.js.txt”を
C:\Documents and Settings\%USERNAME%\Application Data\Adobe\Acrobat8.0\JavaScripts
(Macは/Library/Acrobat User Data/8.0_x86/JavaScripts)
に保存し”InitShowThumbnails.js”にリネイム

後はAdobeReaderを起動

使い方は

表示⇒ツールバー⇒その他ツールバーで『アドオンツールバー』を追加し、上の画面のように"IST"と灰色の文字で表示されればOKです。

以下少々解説
*************************************
PDFが開かれた際の動作は基本的にPDF自体に記録されているものですが、
(Readerの設定によっては前回の状態を引き継ぐ事も出来る)
今回はそれを無視してw"常にサムネイルを表示する"という事なので
少しトリッキーな方法を使います。

以前のトピックスに有る通りPDFのJavaScriptには各レベルがあり
PDFが開かれた際の動作は『文章レベルのJavaScript』になります。
ただ『文章レベルのJavaScript』はPDF自体に記録されるものなので
文章が開かれたという事(イベント)を拾う事が出来ません。(よね?)

そこで『フォルダレベルのJavaScript』で常時動いている
ツールボタンを使いました。ドキュメントを開いて初めての動作で
サムネイルを表示するようにして、GlobalオブジェクトにdocIDを保存し
次回以降は無視するようにしました。

ドキュメント間を跨ってGlobalオブジェクトを使用する訳では
無いのですが、変数名をユニークにするのも面倒なのでこんな感じに
しました。

実質20行たらずですが、結構考えました。
もっといい方法があれば教えてください。

質問などあればコメントにどうぞ~

Bullzip PDFでタイトルや題名などのPDF文章情報に日本語が使えるようにするアドイン

2009-01-29 | Weblog
Bullzipの日本語対応度ですが
まずPDF生成の際の日本語対応度は何段階か有って(ると私は思っているんですが)

1.日本語文章をPDF化出来るか
2.日本語のフォントをPDFに取り込めるか
3.日本語のファイル名が付けられるか
4.日本語のファイル名が自動的に付くか
5.PDFの文書情報に日本語が使えるか

等があげられると思います。

BullZipでは4.までは対応しています。
(ちなみに4.はデフォルトの<title>ではなく
<docname>や<basedocname>を指定する必要が有ります)

ただ5.には対応しておらず<docname>なんかをタイトルに設定しても
文字化けしてしまします。

そこでアドインを作ってみました。

ダウンロード

上記でダウンロードしたzipファイルを解凍し出来た3つのファイルを
Bullzipのマクロフォルダ(デフォルトはC:¥Program Files¥Bullzip¥PDF Printer¥Macros)に入れてください。

これで普通にBullZipで印刷したあげると・・・・・
PDFの文書プロパティの 『タイトル』、『作成者』、『サブタイトル』、『キーワード』の各項目に文字化けせずに日本語が表示されるようになったはずです。

例えば以下のように設定すれば


こんな風に出てくるはずです。


解説は別の機会に書こうと思いますが一つだけ・・
OnAfterGUIイベントで処理を呼び出していますが
ダイアログを出さないように設定した場合も
ちゃんと呼び出されますのでご安心下さい。

感想などありましたら是非コメント下さい。

Bullzip PDFでVBScriptによるイベント処理が可能になったようです

2009-01-27 | Weblog
どうも気まぐれに更新です。
今回は、PrimoPDFから離れてBullzip PDFです。

http://www.bullzip.com/products/pdf/info.php#Introduction

これを見ると

>2008-10-21 (6.0.0.695)
>* VBScript macros and events are now supported. This extends the >programmatic control you have over the PDF Writer.

という事でイベント処理で、色々任意の処理を追加したり出来るように
なったんですね。昨日まで気付きませんでした。

元々bullzipはCOMのオートメーションオブジェクトをサポートしてい
たんですが、あくまで設定ファイルをVBScriptで書き換えて
Runでプリンタを起動するという感じでしか使えませんでした。

今回新たにサポートしたというのは、PDF生成中にイベントを発生させて
VBScriptで独自の処理を組み込むことが可能になったということです。

以前提供していたPrimoreは、PrimoPDFのPDF生成中に無理やり割って入って
PDFの元になるPS(PostScript)を書き換えてあげる事で色々実現していましたが
今回のBullZipの機能は、Primoreのような無理やりな方法を採らなくても
独自のAddinを実現できるようになったという事です。

ただBullZipはPrimoPDF程は結構単純な動きでは無いので
どんな動きをしているかや各種設定項目の意味、優先順位
永続的なのか一時的なのかを理解しないとAddin作成は
難しいかもしれません。

リファレンス(とは呼べない気もするが)を見ると
http://www.biopdf.com/guide/vbscript_events_and_macros.php

イベントは
OnConfigLoaded(設定読み込み後)
OnPreprocessText(抽出テキスト作成後)
OnMacrosApplied(?)
OnAfterGUI(ダイアログ出現後)
OnSuccess(処理成功後)
OnError(処理失敗後)
OnAfterPrint(処理後)

の7種類あり上記の順番でイベントを拾うことが出来る。
"OnMacrosApplied"は今のところどんな風に使う為のイベントなのか
分からない・・・

早速サンプルを見ると
http://www.biopdf.com/guide/examples/vbscript%20-%20keywords/

PDF化しようとしているドキュメントからテキスト情報を抽出する
設定をOnConfigLoaded時に行い、OnPreprocessText(抽出テキスト作成後)時に
そのテキストからPDFのキーワードとなる情報を選択し
PDFのKeywords情報に設定してからPDFを生成する・・・という感じの処理です。

確かに、Keywordなんて一々設定するのは面倒くさいんですが、
後で検索する際に便利だったりするので自動で付けてくれるAddinは
便利ですね。Dictionaryでソートまでするなんて手が込んでますね。

基本的にBullzip独自の機構はContext("xxx")で
これで処理中

とりあえず自分でもなんか作ってみているんですが
Context("Config")("keywords")と同様に
Context("Config")("Title")も使えるのかと思ったら
使えない・・・

OnAfterGUIでやっても使えないからバグなのかな・・・

そんな感じで・・では~

■追記
チャンと一番最後の"Important Note:"書いてありますね
>all configuration names must be written in lower case.

元のiniファイルとは関係なく必ず小文字にしなきゃいけないんですね。
Context("Config")("title")にすればいいんですね

PDFとJavaScriptについて5 ツールバーでアイコンを使うには

2008-11-24 | Weblog
今回は、AdobeReaderのツールバーでアイコンを使う方法についてです。




マニュアルを見ると addToolButtonメソッドのパラメータとして"oIcon"がv7より追加され
"Icon Stream object"を設定すればよいことが分かります。
任意の画像ファイルから画像情報を表示するサンプルが書かれていて
**********************************
// Create a document
var myDoc = app.newDoc();
// import icon (20x20 pixels) from the file specified
myDoc.importIcon("myIcon", "/C/myIcon.jpg", 0);
// convert the icon to a stream.
oIcon = util.iconStreamFromIcon(myDoc.getIcon("myIcon"));
// close the doc now that we have grabbed the icon stream
myDoc.closeDoc(true);
// add a toolbutton
app.addToolButton({
cName: "myToolButton",
oIcon: oIcon,
cExec: "app.alert('Someone pressed me!')",
cTooltext: "Push Me!",
cEnable: true, nPos: 0 });
app.removeToolButton("myToolButton")
**********************************
とあるんですが,AdobeReaderではnewDocメソッドは使えません。
importIconはマニュアル上はAdobeReaderで使えると書いてあるんですが
うまくいきませんでした。

ツールバーにアイコンを追加するのにドキュメントが必要 というのはいまいちです。

Icon Streamを自生成する方法は他に無いのかと
マニュアルの"Icon Stream"を見ると3つのプロパティがあり

**********************************
■read(nBytes) A function that takes the number of bytes to read
and returns a hex-encoded string. The data should be the icon
representation as 32 bits per pixel with 4 channels (ARGB) or 8 bits
per channel with the channels interleaved. If the icon has multiple
layers, the function may return the pixels for the topmost layer,
followed by the next layer behind it, and so on.
■width The icon width in pixels.
■height The icon height in pixels.
**********************************

と書かれているんですが・・いまいちどう生成したらいいのか分からない
インターネット上を検索するとAdobe自体のサイトに Using Image in Acrobat JavaScript Dialog というページがありました。
このページにはダイアログボックスに 画像を表示する方法が記載されていますがアイコンについても参考になります。

まず20x20の画像ファイル(BMP,JPG,GIF,PNG..)を用意して
http://blogs.adobe.com/acdc/files/adig.jar を使用して
c:>java -jar adig.jar hoge.jpg ./
と実行すると hoge.jpg.txt が出来ます。
中を開いて一番最後にある
"var image = "ff00ff00ff00ff00・・・・・・・・・・・・・"
の部分が、変換された画像です。
16進文字列で表現されていて1Pixelが透過情報,R,G,Bが各2Byteで 8Byteで構成されています。(小文字大文字の区別は無い"ff"="FF")
(20x20だと20x20x8=3200Byteになります)
この16進文字列がIcon Streamがメインの情報で
それに各プロパティを付けてあげるとIcon Streamになります。

*****************************
var oMyIcon = {count: 0, width: 20, height: 20,
read: function(nBytes){return image.slice(this.count, this.count += nBytes);}};
*****************************

このoMyIcon(Icon Stream)をAdobeReaderが読み出す時に
countを0~399までの400Pixel分繰り返しread(8)を
実行しているんではないでしょうか。

まとめるとtoolbarでiconを使うには
*****************************
var image = "ff00ff00ff00ff00・・・・・・・・・・・・・";
var oMyIcon = {count: 0, width: 20, height: 20,
read: function(nBytes){return image.slice(this.count, this.count += nBytes);}};
app.addToolButton({
cName: "komikoni_hoge1",
oIcon: oMyIcon,
cLabel: "HOGE_TOOL",
cTooltext: "これはホゲツールです",
cExec: "hoge_tool();",
cEnable: "event.rc = (event.target != null);" } );
*****************************

のように定義してあげると最初の画像のようになります。



前回の、PopupBookmarkに透過アイコンを表示するようと
こんな感じになります



※透過アイコンについて
adig.jar自体は透過GIFや透過PNGの透過情報は無視するので
アイコンに透過を使用したい場合、自分で置換する必要が有ります。
例えば白の部分を透過にする場合、
"FFFFFFFF"を"00FFFFFF"にすれば 白の部分は透過になります。
(透過度をセルによって変えたい場合は面倒くさいですね)
なお、adig.jarの16進文字列は150Byte単位に改行されるので
置換や編集する際は8Byte単位にしたほうが便利です。 では~


PDFとJavaScriptについて4_『PopupBookmark』

2008-11-18 | Weblog
AdobeReaderのしおり表示は左に出て邪魔だしキーボード操作 する
にも不便なんで作ってみました。微妙に実用的ですw

↓こちらからダウンロードしてください。
AdobeReader用アドオン PopupBookmark V1.0
(v7,v8専用です・・・・Acrobatでも動きますw)



インストール?は

ダウンロードした”PopupBookmark.js.txt”を
C:\Documents and Settings\%USERNAME%\Application Data\Adobe\Acrobat8.0\JavaScripts
に保存し”PopupBookmark.js”にリネイム
後はAdobeReaderを起動

使い方は

表示⇒ツールバー⇒その他ツールバーで 『アドオンツールバー』を追加し ツールバー上での”PopupBookmark”をクリック!

又は

メニューで ツール⇒PopupBookmark

又は
キーボードで ALT + T ⇒ P

単純にしおり情報をポップアップしているだけなんですが、 キーボードだけでしおりを辿れます。
例えば上の画像のPDFでは ALT + T ⇒ P ⇒ 2 ⇒ 1 で一瞬で移動できます
(※AdobeReaderでも上下左右キーで操作可能です)

しおりの頭に表示されるアンダーバー付きの文字は "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"の36文字で
それ以上は上下キーで移動するしかないんですが・・・
初回起動時に開かれているしおりはチェックが付きます。

*************************************************** JavaScriptのサンプルプログラムです・・・とは言うには 恥ずかしいんですが、ブックマークの読み込みや ポップアップの使用は参考になると思います。 なお、毎回ブックマークを全て読み込むと遅いので 初回にGlobal変数にポップアップ用の配列を保存しています。 Global変数は永続化してないのでAdobeReaderが終了すれば破棄されます。
ポップアップは表示用の文字列と戻り値用の文字列を指定できるんですが、オブジェクトは設定できないので各階層の配列番号を
”root,2,1”のような感じで保存して後でsplitしてしおりのアクションを実行しています。
***************************************************
感想・質問などコメント頂けると嬉しいです

では~

追記:少し書き換えました(bookmarkが無い時の処理を追加)

PDFとJavaScriptについて3

2008-11-18 | Weblog
AdobeReader(Acrobat)のJavaScriptには独自のグローバル変数があります。

グローバル変数を使うと、異なるPDFファイル内(文書レベル(PDFの単位))
のJavaScriptで変数を共有することが出来たり、自分で作ったJavaScriptの
ツール(フォルダレベル)で設定等を保存する事が出来ます。

グローバル変数は、global.XXX のように頭に”global”を
付けた形となります。
V8までの定義方法は単純に「global.XXX = 8;」なんですが
V8以降セキュリティ上の理由からいろいろ変更されていて、
使用用途により定義方法が異なります。
文書レベルの場合、基本的に保存をした文章以外から変数を読み出す事は
制限されるようになりました。もし文章同士でGlobal変数を共用したい場合
下記のように関数内で特権を与えた上で変数定義を行う必要が有ります。

setXXX = app.trustedFunction ( function(value)
{
app.beginPriv();
global.XXX=value;
app.endPriv();
});
setXXX(8);

つまり文章レベルでは、永続化(下で出てくる)を行わない限り
「global.XXX = 8;」の形式で定義する意味はなく(普通の変数と一緒)
文章同士で共用する場合、必ず上記のように行う必要が有ります。
少し不便ですがしょうがないですね。

ただし、フォルダレベルの場合は上記のような表記は不要で
「global.XXX = 8;」の形式でOKです。

global変数を永続化する場合は変数を定義した後に
global.setPersistent("XXX", true);
としたあげましょう。

永続化するとAdobeReader(Acrobat)を終了しても
次回起動時に同じ変数を使用することが出来ます。

どのように永続化しているかは簡単に確認できます。

適当に変数を保存しAdobeReaderを閉じます。(Acrotray.exeも閉じてください)
JavaScriptの保管フォルダと同じ場所
(C:Documents and Settings%USERNAME%Application DataAdobeAcrobat8.0JavaScripts)にある『glob.js』を覗くと

try{eval((new String("global.XXX=(new Number(8))")).valueOf());}catch(e){}

のような感じに定義されたはずです。
シリアライズされてファイルに保存されるわけです。
起動時に『glob.js』が読み込まれevalにて変数が定義されるというわけです。

V5マニュアルには永続化できるは”ブーリアン、数値、文字列型の変数”と記載されていますが、V8では配列や連想配列も使用できました。
文字列には当然日本語も使用できます。(uxxxxの形で保存される)

保存できる変数の大きさはV6以前では制限があるようですが
マニュアルによって書いてある事が違うので(2k-4k又は32k)
よくわかりません。

ちなみにV8では設定元の文書情報は、glob.settings.jsに保存されます。

Global変数については情報が少ないので、各バージョンでの互換性や
v8以降の変更など、ちゃんと使うには自分で試してみるしか無さそうですね。

JavaScript初心者の私が解説するにはやはり無理があるので
次は、実際に作ってみたJavaScriptのツールを公開したいと思います。

では~