パーソナルビジネスソフトとお役立ち情報のサイト
PDFlib
COOKBOOK - PDFlib サンプルプログラム

ブロック出力

JAVAコード

ブロックを含んでいる PDF ページを入力して、処理します。
ブロックは pCOS インターフェースによって検索されます。
また、ブロックの機能は出力ページのブロックを視覚化するために使用されます。
実際のアプリケーションでは、外部のデータソースから取得したデータでブロックを埋めることになるでしょう。

使用するソフトウェア:PPPS 7 もしくはそれ以上
使用するデータ:PDF入力ファイル


import java.io.*;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;

public class starter_block
{
  public static void main (String argv[])
  {
    /* データファイルの場所です。必要なように適合させます */
    String searchpath = "../data";

    pdflib p = null;
    double width, height;
    String infile = "boilerplate.pdf";
    int i, page, indoc, blockcount;
    String optlist;

    try {
      p = new pdflib();

      p.set_parameter("SearchPath", searchpath);


      /* load_font()等からの戻り値を調べなければいけないことを
       * 表しています。
       */
      p.set_parameter("errorpolicy", "return");

      if (p.begin_document("starter_block.pdf", "") == -1)
        throw new Exception("Error: " + p.get_errmsg());

      p.set_info("Creator", "PDFlib starter sample");
      p.set_info("Title", "starter_block");

      /* PDFが含まれている各ブロックを開きます */
      indoc = p.open_pdi_document(infile, "");
      if (indoc == -1)
        throw new Exception("Error: " + p.get_errmsg());

      /* 初めのページを開きます */
      page = p.open_pdi_page(indoc, 1, "");
      if (page == -1)
        throw new Exception("Error: " + p.get_errmsg());

      width = p.pcos_get_number(indoc, "pages[0]/width");
      height = p.pcos_get_number(indoc, "pages[0]/height");

      p.begin_page_ext(width, height, "");

      /* 読み込みページを出力ページ上に配置します */
      p.fit_pdi_page(page, 0, 0, "");

      blockcount =(int) p.pcos_get_number(indoc,
        "length:pages[0]/PieceInfo/PDFlib/Private/Blocks");

      if (blockcount == 0)
        throw new Exception("Error: " +infile + 
          "does not contain any PDFlib blocks");

      /* ページ上の全てのブロックをループします */
      for (i = 0; i <  blockcount; i++)
      {
        String blockname;
        String blocktype;

        /* 最初のページ上の$i番目のブロックの名前とタイプを取得します。
         * (テキスト/イメージ/PDF の一つ)
         */
        blockname = p.pcos_get_string(indoc,
          "pages[0]/PieceInfo/PDFlib/Private/Blocks[" + i + "]/Name");

        blocktype = p.pcos_get_string(indoc,
          "pages[0]/PieceInfo/PDFlib/Private/Blocks[" + i + "]/Subtype");

        /* 全てのテキストブロックを視覚化します */
        if (blocktype.equals("Text"))
        {
          optlist =
            "fontname=Helvetica encoding=unicode " +
            "fillcolor={rgb 1 0 0} " +
            "bordercolor={gray 0} linewidth=0.25";

          /* 中身としてブロック名を簡単に使います */
          if (p.fill_textblock(page, blockname, blockname, optlist)== -1)
            System.err.println("Warning: " + p.get_errmsg());
        }
      }

      p.end_page_ext("");
      p.close_pdi_page(page);

      p.end_document("");
      p.close_pdi_document(indoc);

    } 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();
      }
    }
  }
}
JAVA1.5.0/PDFlib 7.0.0
(Dec 8, 2006)










■ブロック機能に関しては、こちらを参照してください。




■データファイルには「使用するデータ」と「CMap データ」が含まれます。




■ここでは PDF 入力ファイルのブロックのフォントは、Helvetica に指定してあります。




■「PDF 出力」はライセンスを取得されていない方がテストした結果と同様になるように、ライセンスキーを適用しない状態で出力したものです。そのため、「www.pdflib.com」スタンプが表示されていますが、ライセンスキーを適用すると表示されません。