Application form maker --- pdf2sty

What is this?

Roughly speaking, Afm is a small program to make LaTeX style file for an application form whose pdf-formated file is given.

Afmは, 大雑把にいうと, pdfで用意されている入力用紙から, LaTeXのstyファイルを作るための小さなプログラムです. わかる人には判る表現をすると, pdfからkakenhi-latexみたいなスタイルファイルを作りたいときに 便利かと思われるプログラムです. 例で説明をするなら, こういうpdfファイルから こういうファイル群 をつくる為のプログラムです.

Where is this?

最新版は, github: https://github.com/a175/afm におきました. 大幅にUI/操作手順を変えました.

とりあえず, alpha版を ここにおいておきます. ライセンスはGPL. 無保証です. manファイルとかも含めたtarボールは, ここにあります. 多分, afm-0.0.3.tar.gzが最新版です.

とりあえず, alpha版の debを作っておきましたので, それを入れてしまうのが早いかもしれません. 引越しに伴いどっかやってしまいました orz.

What are needed?

本体, afmが必要です.

本体の他には, Pythonでかいているので, pythonは必要です. Pygtkも使ってます. Pdfのレンダリングライブラリが必要です. Pdfのレンダリングライブラリは, python-popplerもしくは pymupdf (fitz)を使えるように書いてあります. これだけ揃う環境ならOSは何でも良いとおもいます. 最近のLinux なら全てデフォルトで入っているかもしれません.

Pdfのレンダリングライブラリが必要ですが debian なら python-poppler poppler-uitilsあたりをapt入れれば python-popplerを使えるようになると思いますので, 管理者権限があれば, そうするのが手っ取り早いと思います. しかしながら, 管理者権限がない場合は, この手は使えません. pipを使って自分のホームに必要となるものを揃えるのが 簡単かと思います. そのためには次をコマンドラインで実行すれば, うまく行くと思います:

まず, pipをインストールするためのスクリプトget-pip.pyを ダウンロードし, 実行(インストール)し, 一応念の為アップデートする.

次にpipをつかってpymupdfをインストールする.

How to use

(afm.py本体を ダウンロードして, afmという名前で保存した場合を書いています.)

./afmとやるか, python afmとやるか, 例えばdebを入れたときには, afmとコマンドを叩くだけで実行できます.

実行すると ファイルを選ぶ画面がでますから, ベースとなるpdfファイルを選んでください.

選んだpdfファイルが表示されますので, 適当にグリッドを加えていって下さい. そのグリッドを使って入力欄の指定を加えていって下さい.

最後にsave as釦を押して, zipファイルとして, 作成したスタイルを保存します.

例えばhoge.pdfを元に作業をした場合, 作成したzipファイル を解凍すると, 中には, 元のpdfであるhoge.pdf, hoge.styというスタイルファイルと sample.texというサンプルと, サンプルをコンパイルするためのMakefileと, 再編集するときのためのjsonファイルが 生成されます. サンプルsample.texを texにかけてみてみればだいたい使いかたは判るかもしれません. なお, \usepackage[none]{hoge} では背景は省略されます. \usepackage{hoge} もしくは \usepackage[pdf]{hoge} では背景のpdfが使用されます. dvipdfmxでdviファイルをpdfに変換し確認する必要があります. dvipdfmx以外の方法は未対応です. (\includegraphicsにオプションとして page=2の様にページを与えることができる物には変更できると思います.)

こまごまとしたこと

国内の集会に参加するため出張した際に, 海外出張の直後で時差ぼけが直っておらず変な時間におきてしまったので, 暇潰しに, 昔rubyでかいた同じようなプログラムをpythonに書き直したものがこれです. ちなみに, 集会にいって, `変なじかんにおきたから無駄なもの作ってしまいました'と あべのりさんに報告したら, 寝るか数学しろと叱られてしまいました.

Kakenhi-LaTeXは発想は参考にさてていただきましたが, ソースはみていません. すくらっちからかいています. 多分完全に違う実装になっていると思います. Kakenhi-LaTeXでは 入力を予め\newcommandで定義してから組むので, エラーが何処で出たのかわかりにくいですが, そのその点は改善されていると思います. しかし, 複数ぺーじにわたる欄を作る方法が 僕には上手くできなかったので(ちゃんと考えていないのも原因) 実装していません. その点はKakenhi-LaTeXの方が使い易いとおもいます.

picture環境を使って配置しているだけです. ですので\unitlengthを変更すると乱れます. また同じ理由でjsarticleとは相性が悪いかもしれません. usepackageする際にjsをオプションとして指定すると良いかもしれませんが 試していませんので上手くいくかわかりません.

生成されるhoge.styを直接つかうよりは, これを少し編集して使う方が良いかもしれません. 例えば, 日付を入力する欄が複数あるばあい (pageAの\boxIDaとpageCの\boxIDd)は, hoge.styに

\newcommand{\hiduke}[1]{\newcommand{\hiduke@nu}{#1}}
\hiduke{}
というのをかいた上で中程にある, \pageNoAAtFirst, \pageNoCAtFirstの定義を
\newcommand{\pageNoAAtFirst}{\boxIDa{\hiduke@nu}}
\newcommand{\pageNoCAtFirst}{\boxIDd{\hiduke@nu}}
としてやると, 本文で\hiduke{10/2}とやるだけで入力がすみます.

pdfに重ね打ちをするので, 論文にコメントするためにも使えるかもしれません. まぁ素直にacrobatを使ったほうが良いですが..

Pygtkでresolutionをどうとってくれば良いのかわからず, とりあえず, 自分のかんきょうでは丁度ポイントになっていたので, それで決め打ちです. それが原因で乱れるかのうせいもあります.

コマンド名のuniquenessはチェックしていません. 同じなまえを定義するとLaTeXのコンパイルは通らないとおもいます.

ZIPではなくdtxとかも考えたのですが, 手をぬきました.

すでに作った, boxを編集するときの挙動がわかりにくい気がするのですが, とりあえずは放置です. あきたので.

とりあえず手元の環境では動いていますが, 他の環境ではどうなるかはわかりません. てすとが十分ではないです.

Change log

7/7/'18 pymupdf/popplerのどちらでも動くようにした.

3/18/'18 githubへ移行

1/8/'12 pdftk, pdf2epsの使用を止め, dvipdfmxのみに対応.

4/4/'11 prototype.


[もどる]