利用方法¶
PNGファイルを作成できますか?¶
Field ReportsはPDF専用の帳票ツールですので,対応している出力形式はPDFのみです。 PNGファイルを取得するためには,何らかのツールを使用してPDFから変換する必要があります。
例えば,Adobe AcrobatでPDFを開いて出力形式をPNGで保存することができますが,Windowsであれば,これをOLEオートメーションで自動化することもできます。Linuxであれば,ImageMagick+GhostScriptでPDFをPNGに変換できます。
フォームフィールドを残してPDFを出力することはできますか?¶
フォームフィールドを残すかどうかは,permanent属性で制御できます。permanent属性のデフォルト値はtrueなので,無指定の場合すべてのフィールドがコンテンツに変換されます。 明示的にfalseに設定する事で,フォームフィールドを残す事ができます。
すべてのフィールドを残したい場合は,以下のようなスタイル指定を加えてください。
"style": {"*": {"permanent": false}}
permanent属性を個別に指定して一部のフィールドのみ残したい場合は,context要素内の個々のフィールド属性で指定してください。
"フィールド名": {"value": "値", "permanent": false}
フォームフィールドの情報を読み取れますか?¶
Field Reportsのコマンドラインプログラムであれば,そのような機能を持っています。 以下のようにコマンドを実行してください。
reports info -f <PDFファイル>
テキストを縦書きで出力するにはどうすればいいですか?¶
PDF自体が縦書のサポートは追加的な扱いとなっている関係で,指定方法が若干複雑になります。
縦書の指定はフォントリソースで行う必要があります(ユーザーズマニュアル「3.6.1 font要素」を参照ください)。これは,Adobe AcrobatでPDFテンプレートにフィールドを配置する際に縦書のプロパティを設定することはできないためのです。レンダリング・パラメータにてフィールドに縦書のフォントを指定することにより,縦書の指示を行ないます。
フォントリソースを利用するためには,実行時に日本語フォントファイルが必要となります。
フォントの埋め込みは必須ではありませんが,異なる環境での文字化けの発生を防ぐために埋め込み指定を行うことをお勧めします。
縦書きテキストを利用したサンプルはあまりありませんが,下記ページのレンダリングパラメータ記述例に「writing-mode: " VerticalRl " 」 を追加すれば縦書きになります。よろしければ、実験してみてください(フォントは,お手持ちのフォントに差し替えてください)。
また、下記ページは透明テキストを利用するTIPSですが,テキストが縦書きになっています。
PDFに印刷時プロパティを設定したいのですが?¶
レンダリングパラメータで設定できます。 viewer-preferences辞書は,Adobe Acrobatの「文書のプロパティ」で設定できる項目に概ね対応します(PDFの仕様にもとづいた名称のため,Adobeのアプリケーションとの対応がわかりずらく申し訳ありません)。 print-scalingは「詳細設定」タブの「ページの拡大/縮小」に対応し,Noneが「なし」に,AppDefaultが「デフォルト」に,それぞれ対応します。
PDFの仕様では,print-scalingが設定されている時の印刷時の振る舞いはアプリケーション依存になっておりまして,明確に申し上げることは困難です。
ただ,Adobe Reader/Acrobatの動きを観察する限りでは, 「ページサイズ処理」もしくは「ページの拡大/縮小」の初期値の決定に影響を与えているようです。
- AppDefaultを設定したとき
ユーザの前回の選択を記憶する。
- Noneを設定したとき
常に「なし」が選択される。
PDFのフォームフィールドの情報を読み取ることができますか?¶
Field Reportsのコマンドラインプログラムであれば,そのような機能を持っています。 以下のようにコマンドを実行してください。
reports info -f <PDFファイル>
バーコードやQRコードを出力できますか?¶
バーコード・QRコードの出力は直接サポートしておりませんが, 何らかの方法でバーコードのイメージを生成する事ができれば, Field Reportsで利用する事は可能です。
考えられる方法をいくつかあげます。
バーコードライブラリを利用する
プログラミング言語毎に,有償/無償のバーコードライブラリが複数存在します。 例えばPHPでは,PHP-Barcodeというライブラリが定番のようです。
QRコードでは,QRcode Perl/CGI & PHP scripts というライブラリがあるようです。
これらのライブラリを使って画像データを作成し, いったん一時ファイルとして出力してからField Reportsに取り込むか, 「data URI scheme 文字列」形式で直接バイナリデータを渡します (ユーザーズマニュアル「5.2.3 URL」を参照してください)。
外部サービスを利用する
例えば Google Maps の Google Chart Tools というサービスを利用すると, QRコードを生成する事ができます。
以下のページでField Reportsでの利用例を見ることができます。
http://www.field-works.co.jp/2011/12/21/field-reports-1-4-の新機能-7-その他の改善項目/
(3)バーコードフォントを利用する
バーコードを表示するための専用フォントがあり, これを利用すれば1次元バーコードをテキストとして表示する事ができます。
例えば,バーコドリーダーのメーカーが配布している以下のバーコードフォントがあります。
ただし,バーコードフォントで表現できるのは,CODE39, CODE128, NW-7などで, 日本で一般的な JANコードは作る事ができません。
コマンドラインインターフェースとは何ですか?¶
各プラットフォーム(Windows, Linux, Mac OS X)毎にコマンドラインから実行できるプログラムを提供しています。
コマンドラインの使用例としては,以下のページ等を参照してください。
コマンドラインプログラムに与える引数については,ユーザーズマニュアルの「6.7 コマンドラインI/F」を参照してください。
COMインターフェースの使用例はありますか?¶
COMインターフェースの利用例が少なくて申し訳ありません。 以下の発表スライドにExcelからの使用例が若干記載されています
.Net Framework Bridgeで例外が発生します¶
Field Reportsのログは、標準エラー出力に出力しています。 Windowsアプリケーションにはコンソールが存在しないため,ログを出力しようとすると例外が発生してしまいます。
デバッグのためにログレベルを上げる場合は、 何らかの方法で標準出力を作成してください。
例えば,AllocConsole()というWin32 APIをC#から呼び出すことで,コンソールを作成することができます。
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace test
{
static class Program
{
[DllImport("Kernel32.dll")]
static extern bool AllocConsole();
[STAThread]
static void Main()
{
AllocConsole();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
大量のPDFを結合しようとしたらエラーが発生しました¶
PDFを400枚ほど生成し、それらを1枚のPDFに結合しようとすると下記のエラーが発生しました。 PDFの生成・結合において,ライブラリ上にて限度数があるのでしょうか?
PHP Warning: fr_render(): RuntimeError:
/usr/local/apache/files/tmp/pdf/1395146401416054intra_pass.pdf: Too many
open files in /usr/local/apache/files/lib/Intra/File/PdfCreate.php on
line 114, referer: /contents/jinji/issue/intra_pass.php
Field Reports内ではファイル数の上限を設定していませんが, Linuxでは「1プロセスが同時にオープンできるファイルの最大数」が制限されています。 おそらく,この上限に達したのではないかと思われます。
ただ,400ファイルは少なすぎる様にも思えますので, お手数ですが以下の手順で調査を行ってください。
上限数の確認
PHPを動作させているユーザで,以下のコマンドを実行してください。
$ ulimit -a
open filesは,幾つに設定されているでしょうか?
実際にオープンしているファイルの確認
オープンしたファイルをクローズしていない処理があるのかもしれません。 lsofコマンドを使って,PHPのプロセスが現在開いているファイルを確認してください。 /usr/sbin/lsof などに存在しなければ,追加でインストールしてください(以下はCentOSの例)。
$ sudo yum install lsof
可能であれば,ご報告いただいたエラーが発生する直前のタイミングを狙って, lsofコマンドを実行してください。
$ sudo /usr/sbin/lsof
特定のファイルを大量に開いているなどの傾向はみられるでしょうか?
テキストを太字にする方法を教えてください¶
可能であれば,太字体の日本語フォントを使用していただいたほうが仕上がりがきれいになるとは思いますが, 文字の縁取りを表示することで擬似的に太字にする方法をご紹介します。
text-stroke-colorは通常「透明」になっていて非表示状態ですが, これに表示色を指定すれば,縁取りが表示されます。 さらに強調したい場合は,text-stroke-widthを1より大きい数にしてください。
ただし,単にtext-stroke-colorを設定すると,描画モードが切り替わって白抜き文字になってしまいます。 その場合は,同時にcolorにも同色を指定してください。
{
"template": {"paper": "A4"},
"context": {
"hello1": {
"new": "Tx",
"value": "Hello, World!",
"rect": [100, 700, 400, 750]
},
"hello2": {
"new": "Tx",
"value": "Hello, Bold!",
"color": "Black",
"text-stroke-color": "Black",
"text-stroke-width": 1,
"rect": [100, 600, 400, 650]
}
}
}
PDFのバージョンを指定することはできますか?¶
Field Reportsではオブジェクトの透明度を指定する命令を発行する可能性があるため, 出力するPDFのバージョンを1.6としています。 逆に透明度を指定しなければ1.5としても問題ないのですが, あいにく出力するPDFのバージョンを変更する機能は持っておりません。
そこで,Field Reportsで出力したPDFのバージョンを後から変更する方法をいくつかご紹介いたします。
PDFファイルの先頭部分は以下のような書式になっており, この数値によってバージョンが識別されます。
%PDF-1.6
したがいまして,ファイルの先頭から8バイト目を”6"(0x36)から”5"(0x35)へ編集することができれば, バージョン1.5のPDFファイルとして認識されるはずです。
テキストエディタで編集
手動で簡単に試すのであれば,vim等のテキストエディタをバイナリモードで使用することで編集できます。
$ vim -b <ファイル名>.pdf
Linuxのコマンドで加工
ddコマンドでPDFファイルの先頭9バイトをカットし, あらかじめ用意しておいた「%PDF-1.5¥n」という内容のファイル(header.bin)と結合します。
$ dd if=ver16.pdf bs=1 skip=9 of=tmp.bin
$ cat header.bin tmp.bin > ver15.pdf
プログラミング言語で加工
PHPであればfr_renders(),Ruby, Pythonであればrenders()を呼んでいただくと,PDFデータがバイナリ文字列として取得できます。 バイナリ文字列の8バイト目を”5"(0x35)で上書きした後にファイルとして出力してください。
連続帳票で繰り返し項目は設定できますか?¶
Field Reportsでは,可変帳票や可変明細表と呼ばれる形式の帳票には対応しておりません。
Field ReportsではPDFをテンプレートとして利用する方式を採用しており, 見栄えのいい帳票が簡単に作成できる長所とのトレードオフで, 可変帳票が実現しにくい構造となっているためです。