PDFとたわむれる

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

PDFとJavaScriptについて2

2008-10-27 | Weblog
前回の続き
AdobeReaderでのフォルダレベルJavaScriptについて

フォルダレベルと言ってもよくわかりませんが
AdobeReaderはPDFの閲覧ソフトなんでJavaScriptは基本的には
PDFに組み込むものなんですが、このフォルダレベルについては
AdobeReader自体に組み込むことが出来るものになります。
(フォルダレベルはアプリケーションレベルと記載されてる事もあります)

具体的には下記のフォルダ(v8.0の場合)にJavaScript(*.js)のファイルを
保存すると起動時に読み込まれます。
C:Documents and Settings%USERNAME%Application DataAdobeAcrobat8.0JavaScripts

例えば以下のコードを"test.js"等として上記フォルダに保存して
AdobeReaderを起動すると
****************
app.alert("Hello World");
****************



起動時に上記のようなメッセージが表示されます。(るはずです)

使用出来るJavaScriptは、core JavaScript 1.5(v8は1.6)をベースに
Acrobat API で定義されたものです。正確には
Acrobat API Reference
の中でAdobeReaderでの使用が許可されたものです。

AdobeReaderで使用可能なものは、各メソッドやプロパティ名のすぐ下に
書かれている4つの四角の4番目が空白のものの他に、空白で無くても読み取りのみ
許可されているももあります。


appのopenDocメソッド (これはAdobeReaderで使える。)


appのnewDocメソッド (これはAdobeReaderで使えない。)



Bookmarkのnameプロパティ (これは4番目が空白でないが、AdobeReaderで読み取り専用として使える。)



ちなみに今回紹介したのは最新のv8のリファレンス(英語)ですが、
v5には日本語版もあるので参考にして下さい。
最新版のリファレンスについても当然日本語版はあるんですが、
Adobeと有料契約を結ばないと見せてくれないみたいです。
(Acrobatを購入しても付いてこない)

では次回

PDFとJavaScriptについて1

2008-10-23 | Weblog
PDFを扱う際にJavaScriptが使えることはあまり知られていなく
AdobeReaderの脆弱性の記事で、初めて知ったなんて方も多いようです。

PDFとJavaScriptは関係は、AcrobatでPDFをバッチ処理するためだけでなく
フォーム機能(PDFで電子申請書を実現する機能)などPDFの仕様と密接に
関わっています。このJavaScriptを使うとExcelでマクロを作るような感覚でAdobeReaderでも結構面白い事も出来ます。(ちょっと言いすぎかな・・)

Acrobatに比べてAdobeReaderで許可されている機能(メソッド)は
制限されていてAcrobat 5.0 JavaScript リファレンス
Adobe Acrobat 7.0例文辞典を見るとPDFの見た目が変わるような機能は大体禁止されているんですが、
情報を取得するような機能は結構使えます。

PDF関係のJavaScriptの動作形態には、
フォルダレベル(AcrobatやAdobeReaderの単位)
文書レベル(PDFの単位)
フィールドレベル(PDF内のフォーム単位)
バッチレベル(AcrobatでPDFをバッチ処理する時)

と色々有るんですが、フォルダレベルに注目したいと思います。

では次回

PrimoPDF v4用 PriMore公開

2008-10-20 | Weblog
PrimoPDF v4用のPriMoreです。

ファイルは以下からダウンロードしてください。
 PriMore4.20.zip
(※PrimoPDF v4専用ですv3.1には使用できません)

■簡単な導入方法
解凍したPriMoreV4.vbeをPrimoPDFのインストールフォルダに格納してください。
(通常はC:\Program Files\activePDF\PrimoPDF)

そして[スタート]⇒[設定]⇒[プリンタ]⇒[PrimoPDF]
⇒[プロパティ]⇒[ポート]⇒[ポートの構成]で
[Arguments for this program are]内の
『C:\Program Files\activePDF\PrimoPDF\PrimoPDF.exe』を
『Cscript.exe "C:\Program Files\activePDF\PrimoPDF\PriMoreV4.vbe"』に変更して下さい。


**************************************************
使用例
**************************************************

今まで出ていた(はずの)↓ようなエラーは出なくなり



PrimoPDFの画面も下記のように正しく表示されるはずです。

 《導入前》



《導入後》




なお、PrimoPDF v4では、作者名、サブタイトル等には
 以下のようにそのまま日本語を記入できます。
このためv3.1の時に 使用していたPDFDocEncoderは
添付していません。



作成されたPDFの文章のプロパティ

 《導入前》



《導入後》




以上です。

**********************
余談
**********************
PrimoPDFv3.1では、PSファイル上に日本語のファイル名を
書いてあげればよかったのですが、v4.1ではその方法は使えず
他の方法も無かったので、PrimoPDFの画面が表示された後に
クリップボードを使用して日本語のファイル名を貼り付けています。
(※クリップボードがクリアされるので注意してください)

TabTree2XML(アウトライン解析枠の内容をXML化)

2008-10-20 | Weblog
作ったのは『TabTree2XML』というマクロで
タブのインデントで階層構造を表現したテキストを
XMLに変換する・・というマクロです。

http://hide.maruo.co.jp/lib/macro/tabtree2xml.html

詳しいことは上のHP(秀丸の公式サイト上のライブラリ)を
見て欲しいんですが、秀丸上のアウトラインを
綺麗に保存する手段が無かったので作りました。

最近、IDEが充実した為、秀丸等のテキストエディタを開発に利用する人が
減っているかもしれませんが、良ければ使ってください。

PrimoPDF v4用 PriMore開発中

2008-07-23 | Weblog
PrimoPDFのV3.x向けにPriMoreというツールを提供していますが、

PrimoPDFの最新版であるV4.x向けには対応していませんでした。
PrimoPDFの仕様が変わったので対応するつもりは無かったんですが
需要があるようなので開発したいと思います。

そんなに時間は掛からないと思うんですが、
作業する時間が無いので・・今月中(7月中)には・・と思っています。

では~

PDFMarkをXML-Schemaで再定義

2008-06-22 | Weblog
ズーと更新してませんでしたが、近況の報告

Primoreの機能アップを考えているんですが、
PDFMark(PostScript用のPDF関連定義部分)を見ているとなかなか複雑で
わかりにくく、外部と連携するのも各アプリ専用のツールになっちゃうので
中間のインターフェイスのファイルを作れないかと思っていました。

CSVも考えたんですがしおりなどは階層構造ですし、固定フォーマット
もいやなのでXML化を考えてみました。
XML化するならとりあえずXML-Schemaだろと思って
PDFMarkの定義をXML-Schemaとして再定義してみました。
http://www.ne.jp/asahi/hey.to/expo/pdf/bookmark10.xsd.xml

単純にしおり情報だけでもよかったんですが、
annotation情報の定義まで作っちゃいました。
(XML-Schemaに詳しい方ご意見下さいね)

XML-Schemaでは属性の組み合わせは制限できないようなので
すべてバリデーションする訳にはいきませんが、これで面倒くさい
チェック処理はパーサーにお任せできそうです。

とりあえずwordのしおり情報をPDFに組み込む為

Wordのしおり情報→XML→(Primore→)PrimoPDF→しおり付きPDFファイル

を考えていますが、とりあえず
・Wordのしおり情報→XML
・XML→Primore→PostScript

の部分はなんとなく作りましたが、ものとして出せるか
妄想で終わるか微妙ですね。

PrimoPDF 4 が出たみたいです。

2008-03-14 | Weblog
コメントでくさんのさんに教えていただいたのですが、PrimoPDFの
新バージョン「PrimoPDF 4」が出たみたいなのでインストールしてみました。

ついこの間、v3.2が出たばかりだった気がしたんですが、
もうv4か。。って感じですね。

早速インストールしてみました、
v3.2では.NET Framework 2.0のインストールが強制的に
起こりましたが、v4はどうなんでしょうか、私のパソコンには
既に入っちゃってるので分かりませんでした。
(v3.2自体で.netを使っているとは思えないので強制的に
インストールするとマイクロソフトからいくらか貰えるんでしょうね)

さて、実際にPrimoPDFで印刷してみるとドキュメント名に日本語が
含まれると



とエラーが出てしまうようですね。チェックを厳しくしたんでしょうが
PrimoPDF内なんだからエラー画面出されても・・という気もしますね

ポップアップ画面は


と今までの青を基調にした画面からがらりと変わりましたね。
動作も大きく変わっていて日本語は完全に拒否されるようです。
ここで配布しているPriMoreもうまく動きません。

ファイル名を直接手で変更しても無視されるようで
ダイアログからファイル名を設定しなければいけません。
(なんか英語版としても使い勝手が悪くなった気がしますね)

インストールされたPrimoPDFのフォルダを覗くと
各モジュールのタイムスタンプはv3.2から何も変わっておらず
ポップアップ画面(PrimoPDF.exe)だけ変えてv4としたようですね。

PriMoreをつかってる方は普通に日本語版v3.1を利用して頂きたいと
思いますが、v4やv3.2と違うところはgsdll32.dllだけなのでv4の
gsdll32.dllをv3.1の日本語版に入れれば出来上がるPDFは全く同じ
だと思います。

v4では日本語での入力を認めてくれないようなのでPriMoreを
対応させることは出来なさそうです。 では

PriMoreバージョンアップ 連続印刷対応

2008-03-06 | Weblog
PriMoreをバージョンアップしました。FinePrintのように
複数のドキュメントを一つのPDFにまとめるのに便利です。

ダウンロードはこちらから

通常のPrimoPDF(もしくは今までのPriMore)では
複数のドキュメントを印刷した場合スプールに溜まり、
一個一個のドキュメントに対してポップアップが出ます。
この為、一つのPDFにまとめる場合、ポップアップで毎回ファイル名を
入力する必要があります。(↓のような感じになるはず)



今回のバージョンアップでは、複数のドキュメントを印刷した場合にも
スプールに溜まらずPriMoreが中間ファイル(PostScriptのファイル)を
マージします。印刷動作が終わった後にポップアップでファイル名を指定して
OKすると一つにまとまったPDFが出力されます。
またPDFにはドキュメント毎にしおりが作成されます。

↓こんな感じのしおりが出来ます。


次は任意のしおり情報を入力する機能です。

感想その他あればコメント大歓迎です。

Wordで複数のセクションで範囲指定して印刷するには?

2008-02-23 | Weblog
PDFのBlogといいつつ、少し関係ないWORDのネタです。
Excelと比べてWORDの情報は少なく、結構悩むことが
多いんですよね。

まずこのWORD画面を見てください。


1ページ目 のページ番号は 1
2ページ目 のページ番号は 2
3ページ目 のページ番号は 3
4ページ目 のページ番号は 1
5ページ目 のページ番号は 2
6ページ目 のページ番号は 3

という構成になっています。

Wordではセクションを区切る事によって、ヘッダーやフッターを
切り替える事ができます。(実際には一つのセクション内でも
最初のページとその他のページ、奇数と偶数のページで
ヘッダーやフッターを切り替えられます)

この機能を利用して3ページ目の後にセクションの区切りがあり
4ページ目のページ番号を1~と設定する事で実現しています。

ここで問題、上記のwordファイルの3ページ目と4ページ目を
印刷するにはどうしたらいいのでしょうか?


『3-4』と指定すれば良いと思われた方・・・不正解です。

Wordの印刷画面で設定する"ページ番号"は、フッターで設定された
ページ番号を使用しなければいけません。
ただ当たり前ですが『3-1』と指定してもだめなんです。
(ちなみにこういう指定をすると3ページ目,2ページ目,1ページ目のように
逆順で印刷されます)

正解は

です。

複数のセクションで同じページ番号が使われている場合
『"P"ページ番号"S"セクション番号』という表記でページを
指定しなければいけないんです。

ここで入れる情報は、Wordのステータスバーの左端にある
『1ページ 2セクション』を見るのが正確で確実です。
(フッターなどは色々な事が出来るので間違う事があります)


なんとか実ページを指定して印刷することは出来ないか?

例えばセクションが複雑に切られているファイルの1ページ目から30ページ目まで
印刷したい時にいちいち調べたくないですよね。
(『1-30』と指定してしまうと実際に何ページ印刷されるか分からないのです)

色々調べてみたのですが、標準で指定する機能はもちろんWord VBAにも
そのような機能は用意されてないようです。
PrintOut メソッドでFrom TOを指定することが出来るのですが、
これも実ページではないのです。(Excel VBAのPrintOutメソッドは実ページ指定なんですけどね…)

ググッてみてもそれらしい情報は見つかりませんでした。
そこで、これを実現するマクロを作ってみました。

ダウンロードは↓こちらから
RealPageNumber.bas

エキスポートしたファイルなのでメニューに登録したりするのは
各自でお願いします。

使い方は簡単です。
RealPageNumberマクロを実行すると

と出てきます。全ページが初期表示されるので
そのまま[OK]を押すと

と変換されます。ここで再度[OK]を押すと印刷されます。

全ページではあまり意味が無いので
初期表示を変更します。例えば3,4,6ページ目を印刷したいとすると

と入力し[OK]を押す。

ここで再度[OK]を押すと指定したページは印刷されます。

もし、プリンターを変更したい場合は、この変換されたページ指定を
コピーしておき通常の印刷画面に貼り付けて使って下さい。

マクロの中
見ていただければ分かるのですが、指定された実ページにジャンプし
そのページ番号とセクション番号を取得しています。

こうしようと思ったきっかけは、Ctrl+Gのジャンプ機能で
半角で『』

一旦表示してその後、変換したページ番号で印刷します。

PS:そんなことしなくてもこうすれば出来るよ・・
 という情報があればぜひ教えてください。



添付ツールで、文書情報にも日本語設定

2008-02-17 | Weblog
下の記事で紹介した自作ツールの
PriMoreを使うことで
ドキュメント名に日本語が含まれている場合の
(自動設定の)ファイル名とPDF内のタイトルの
文字化けを解消することが出来ました。

では、PrimoPDFのポップアップ内で設定する文書情報に
日本語を設定するにはどうしたらいいのでしょうか。
(『PrimoPDF v3.1 の既知の問題』の2個目の問題)

残念ながら問題は解消できません。ただ回避は可能です。
(構造を考えたら改造する以外無理ですよね)

そこで、この問題を回避する
ツール(PDFDocEncoder.exe)をPriMoreに添付しました。
(PriMoreの圧縮ファイルに同梱されています)

使い方は簡単、PDFDocEncoder.exeを
適当な場所から起動し最初の画面に変換したい日本語を入力


入力したら、『OK』又はEnterキーを押下


"376377"から始まるテキストをコピー(右クリックでコピー又はCtrl+C)



コピーしたテキストをPrimoPDFのポップアップ内に貼り付けてください。

タイトル,作成者,サブタイトル,キーワードそれぞれに設定する場合
今の作業を繰り返して下さい。

PDFDocEncoderはもう一度『OK』又はEnterキーを押下すると
元の画面に戻って変換できます。

PDFのプロパティを見ると


大成功!!・・という感じです。

※文書情報のタイトルに設定した場合、その設定内容が
ドキュメント名より優先されます。

PrimoPDFを少し便利にするツール 『PriMore』公開!!

2008-02-17 | Weblog
PriMoreを公開します。

PriMoreは、便利な無料PDF変換ソフトPrimo PDFを
少し便利にするツールです。
これで『PrimoPDF v3.1 の既知の問題』で書いた
一個目の問題が解決します。(2個目の解消については次の記事で)

ソフトのダウンロードは下記からどうぞ
http://www.ne.jp/asahi/hey.to/expo/pdf/PriMore.zip

詳しくはReadMeに書きましたが、使い方は簡単で、まずダウンロードした
ファイル内のPriMore.exeをPrimoPDFのインストールフォルダに格納してください。
(デフォルトはC:Program FilesactivePDFPrimoPDF)

そして[スタート]⇒[設定]⇒[プリンタ]⇒[PrimoPDF]
⇒[プロパティ]⇒[ポート]⇒[ポートの構成]で
[Arguments for this program are]内の
"PrimoPDF.exe" を "PriMore.exe" に変更して下さい。




使用方法は、通常通りPrimoPDFへの印刷をするだけです。

これで日本語ファイル名が最初から出てくるはずです。
またPDF内のタイトルも文字化けせずに表示されるはずです。


現在開発作業中

2008-02-12 | Weblog
全く宣伝していないので、殆ど誰も来ないと思いますが、

基本的な機能(下記の問題を解決する)は実装したんですが、
別の機能を開発中でPriMoreの記事が書けてなくてすいません。


PrimoPDF v3.1 の既知の問題

2008-02-10 | Weblog
どうもはじめましてkomikoniです。

PrimoPDFをちょっと便利にするツールを作成した
んですがまずは,PrimoPDF自体を紹介します。

Primoは人気の無料のPDF 作成ソフトで
エクセルソフトさんで日本語版がダウンロードできます。

競合ひしめく中、古参でもあるPrimoPDFは非常に便利なんですが、
日本語で使うには一部不便な点があります。

※先に誤解の無いようしたいんですが、印刷(生成)された
 PDF自体の日本語表示は全く問題ありません。

公式サイトにも次のように書かれています。
>■ PrimoPDF v3.1 の既知の問題
>PDF ファイルを保存するウインドウで、日本語のファイル名およびフォルダ名が文字化けする
>保存先には半角英数字使用したディレクトリを指定してください。
>また、保存するファイル名には半角英数字をご使用ください。
>PDF ファイルのプロパティに日本語で書き込んだ情報が文字化けする
>半角英数字をご使用ください。

今一言葉だと分からないのでどういう問題なのかを解説すると

秀丸で以下の「テストデータ.txt」を印刷


PrimoPDFのポップアップ画面


PrimoPDFのポップアップ画面で文書情報設定


出来上がったPDFのプロパティ


というようになります。問題点は以下の通りです。
(WindowsXP Home + Primo PDF v3.1日本語版)

■ドキュメント名に日本語が含まれるとファイル名が文字化け

ドキュメント名とはプリンタに印刷する際にアプリケーションが送る
スプールの名称なんですが、殆どのソフトが印刷しているファイル名を
送ります。秀丸の場合「テストデータ.txt」をドキュメント名として
プリンタ(PrimoPDF)に送ります。
PrimoPDFはそのドキュメント名を利用してPDFのファイル名を付けるのですが
日本語が含まれる場合、上記のように「8365835~.PDF」となってしまいます。

(ポップアップの画面で再度「テストデータ.PDF」と付ける事は可能です)

※ドキュメント名によって文字化けの仕方は異なります。

■PrimoPDFのポップアップ画面で文書情報設定すると文字化け

ポップアップ画面で文書情報設定を設定する事が出来て
タイトル、作者名、サブタイトル、キーワードが設定可能です。
何も設定しないとタイトルには「<8365835~>」が、作者名はログオンIDが
設定されるんですが、この画面で日本語を入力すると
上記のようにPDFのプロパティで文字化けしてしまう。



半角文字だけを使用すれば当然上記の問題は起きないんですが、
やっぱり日本語を使いたい!!と思いますよね。
という事で解決法は次の記事で。