pdfbox のインストールとサンプルの実行

どうもです。
帰省中,ばあちゃん家で,おばさんにコーヒーゼリーを出してもらって,
それが美味しくて,作り方を聞いたところ,寒天を使っているそうで。
ほほう。聞いたことあるぞ,寒天。
なんか体にいいらしい。ノンカロリーで食物繊維たっぷり。
海藻からできているので植物性。
ゼラチンは鯨のなんかだったはず。なので動物性。
というわけで,さっそく粉寒天を買ってきて作ったわけです。
ゼラチンは固まるのに結構時間がかかるけど,寒天は早いらしい。
やるじゃん,寒天。今は冷蔵庫でワタシに食べられるのを,スタンバッています。
なんか腹がふくれたりダイエットにもいいらしい。これについては,後日調べる予定。

PDF 中のフォントを変更したい。

こういうむちゃっぽいことを思ってしまうわけです。
Webを徘徊していたら,Javascript でなんとかなるかもとわかり,
Adobe JS Reference みたいなんをDLして眺めてみたけど,
無理そう。
さらにうろついていると,pdfbox というプロジェクトがあり,
それで PDF に対して,ごにょごにょできるっぽい。
いいのか? いいんだな? PDFBOX でできるんだな?
オレはしらねーぞ。退路なんて考えてないぞ。
というわけで,PDFBOX をいじってみることに。

インストール

環境は,WindowsXPcygwin, Meadow,java1.6,です。

ダウンロード

http://pdfbox.apache.org/download.html から。
よくわからんかったけん,以下のものをDLしてみました。

  • pdfbox-0.8.0-incubating-src.jar
  • pdfbox-0.8.0-incubating.jar
  • fontbox-0.8.0-incubating.jar
配置
  • pdfbox-0.8.0-incubating.jar
  • fontbox-0.8.0-incubating.jar

の2つを,自分の好きな場所に配置。ワタシは,e:\java\lib に。
ここに,swt の jar とかも入っているので。


これらにクラスパスを通しておいて下さいな。
ワタシは,Meadow 上でごにょごにょするので,以下のような関数を用意して,
設定しています。

(defun my-set-java-classpath ()
  (interactive)
  (let ((l (directory-files "e:/java/lib" t ".*\\.jar")) (p (getenv "CLASSPATH")))
    (dolist (elt l)
      (setq p (concat p ";" elt)))
    (setenv "CLASSPATH" p)
    nil))

※ちなみに,もちろんこれでは,Meadow 上で M-x shell して動かしている shell 上では,
このクラスパスは有効ではありませんので,ご注意を。


ソースの方は,適当に展開して下さい。
なくてもいいけど,サンプルを動かしたかったので,
ワタシは ~/src/pdfbox に展開しました。

サンプルを動かしてみる。

コンパイルするでござる。
java コマンドでもいいけどすげーめんどうくせぇので,

% pushd ~/src/pdfbox/pdfbox-0.8.0-incubating
% ant

しちゃいました。この間,待機です。
バイナリDLしたのに意味ねーじゃん。
いいんだよ坊や。あたしゃーね,ソースをみたいんだよ,ソースを。


さて,ビルドが終わると,
~/src/pdfbox/pdfbox-0.8.0-incubating/target/classes
にいっぱいクラスファイルができています。
では,さっそく。

% java org/apache/pdfbox/examples/pdmodel/HelloWorld
usage: org.apache.pdfbox.examples.pdmodel.HelloWorld <output-file> <Message>

% java org/apache/pdfbox/examples/pdmodel/HelloWorld tmp.pdf "Hello, world"
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	at org.apache.pdfbox.cos.COSDocument.<clinit>(COSDocument.java:51)
	at org.apache.pdfbox.pdmodel.PDDocument.<init>(PDDocument.java:121)
	at org.apache.pdfbox.examples.pdmodel.HelloWorld.doIt(HelloWorld.java:65)
	at org.apache.pdfbox.examples.pdmodel.HelloWorld.main(HelloWorld.java:107)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	... 4 more

ぬあぁ。怒られてもうた。
ん? apache/commons/logging うんちゃらなんて知らんよ,ワシは。
いいですよ,先生に聞いちゃうもん。
さくっとググって,
http://commons.apache.org/downloads/download_logging.cgi
から,バイナリの,1.1.1.tar.gz をDL。
ほいで,先ほどと同じく展開して,commons-logging-1.1.1.jar を,
pdfbox と同じ場所に配置。何が何だかわからんけど,たぶん必要なのは,
これっぽかったので適当に。
それから,org/apache とかパッケージ指定するの面倒なので,
HelloWorld.java を適当にコピーして,パッケージ指定の行を削除。
んで,コンパイル
あ,今気付いたけど,build.xml にサンプルの実行も入っているんじゃね?
ちょっと見てくる。ないっぽいね。
じゃ,いっか。
M-! して,java HelloWorld tmp.pdf "Hello, world" してみる。
おっ,うまくいったっぽい。
きちんと tmp.pdf ができていて,かつ,見られるね。
よしよし。
あんまり意味ないけど,スクリーンショットの一部。

お疲れ様でした。

さてサンプルは動きましたが,本題のフォントを変更することは可能なのでしょうか?
そもそも pdf の仕様をしらないのにそんなことは可能なのでしょうか?
さらには,肝心のモチベーションがそれほど高くなかったりします。
そして風邪でしんどいんです。
次回からちんたらやってみるかも?