import java.io.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class starter_textflowj
{
public static void main (String argv[])
{
/* データファイルの場所です。必要なように適合させます */
String searchpath = "../data";
pdflib p = null;
int i, tf = -1;
String result;
final double llx1= 50, lly1=50, urx1=250, ury1=800;
final double llx2=300, lly2=50, urx2=500, ury2=800;
/* 内容以上のダミーテキスト生成を繰り返す回数 */
final int count = 50;
/* 列で満たされているダミーテキスト。
* (文字参照は文字オプションより出来ます)
*/
final String text=
"PDFlibは、Adobe PDF(Portable Document Format)形式ファイルをプログ
ラムで生成するためのプログラムライブラリーです。文書を作るイメージ
で手順に従って関数を呼んでいけばPDF文書を生成するプログラムを容易
に作成することができます。PDFlibはさまざまなOS上のさまざまな言語を
サポートしているので、きっと日頃お使いになっている開発環境を使って
PDFを作成することができるでしょう。";
/* テキストの長さを取得 */
int text_length = text.length();
String text_len = String.valueOf(text_length);
final String optlist1 =
"fontname=HeiseiKakuGo-W5 encoding=UniJIS-UCS2-H fontsize=10.5 " +
"textlen=" + text_len + " fillcolor={gray 0} alignment=justify";
final String optlist2 =
"fontname=Helvetica-Bold fontsize=14 encoding=unicode " +
"fillcolor={rgb 1 0 0} charref";
try {
p = new pdflib();
p.set_parameter("SearchPath", searchpath);
/* load_font()等からの戻り値を調べなければいけないことを
* 表しています。
*/
p.set_parameter("errorpolicy", "return");
if (p.begin_document("starter_textflowj.pdf", "") == -1)
throw new Exception("Error: " + p.get_errmsg());
p.set_info("Creator", "PDFlib starter sample");
p.set_info("Title", "starter_textflow");
/* いくつかのダミーテキストを作り、一つおきの
* Textflowオブジェクトのオプションに渡します
*/
for (i=1; i<=count; i++)
{
String num = i + " ";
tf = p.add_textflow(tf, num, optlist2);
if (tf == -1)
throw new Exception("Error: " + p.get_errmsg());
tf = p.add_textflow(tf, text, optlist1);
if (tf == -1)
throw new Exception("Error: " + p.get_errmsg());
}
/* 全てのテーブルが配置されるまでループし、それ以上の
* テキストが配置を必要とする間に新しいページを作っていきます。
* 二列は全てのページ上に作られるでしょう。
*/
do
{
/* "showborder"をフィットボックスの境界の
* 視覚化のために加えます。
*/
String optlist =
"verticalalign=justify linespreadlimit=120% ";
p.begin_page_ext(0, 0, "width=a4.width height=a4.height");
/* 最初の列で満たします */
result = p.fit_textflow(tf, llx1, lly1, urx1, ury1, optlist);
/* もしもっとテキストがあるなら、二行目の列で満たします*/
if (!result.equals("_stop"))
result = p.fit_textflow(tf, llx2, lly2, urx2, ury2,optlist);
p.end_page_ext("");
/* "_boxfull"はもっとテキストがあるならば、
* 続けなけれはならないことを表します。
* "_nextpage"は"新しい列を始める"として解釈します。
*/
} while (result.equals("_boxfull") || result.equals("_nextpage"));
/* エラーチェック */
if (!result.equals("_stop"))
{
/* もし、ボックスが非常に小さかったり全てのテキストが
* 入らない場合、"_boxempty"が起こります。
*/
if (result.equals( "_boxempty"))
throw new Exception ("Error: Textflow box too small");
else
{
/* 他のいくつかの戻り値は、"return"オプションによって
* ユーザーが終了を引き起こしたもので、処理をする
* 精巧なコードを必要とします
*/
throw new Exception ("User return '" + result +
"' found in Textflow");
}
}
p.delete_textflow(tf);
p.end_document("");
} catch (PDFlibException e) {
System.err.print("PDFlib exception occurred:\n");
System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.get_errmsg() + "\n");
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (p != null) {
p.delete();
}
}
}
}
|