Docurain Labo

Docurainサービス開発日記

「外字」も出力可能です

官公庁・自治体・医療方面からのお客様からの問い合わせで多いのが外字の対応状況です。

もちろん、Docurainは「外字」*1に対応しています。

一般的に外字を必要とするのは人名・地名といった名詞において正確に一致する漢字を取り扱うケースですが、 Docurainは IPAmj明朝 に対応しています。このフォントは、いわゆる「外字」として必要とされるグリフのほぼ全て*2を含んだ特殊なフォントです。

例えば、f:id:yutay:20200720105116p:plain:w30 (U+3C08)という漢字の異体字である f:id:yutay:20200720105144p:plain:w30 (MJ文字図形名 MJ001865)は、この文字を埋め込むセルのフォントをIPAmj明朝にした上で、JSONで以下のようにユニコードエスケープで表現可能です。

f:id:yutay:20200720105144p:plain:w30

{ "str": "\ud879\udfdd" }

または、

{ "str": "\u{2e7dd}" }

と記述できます。

IPAmj明朝の文字一覧はこちらを参照してください。

今回は上記のIPAmj明朝の文字一覧からいくつかの文字を抜粋してPDF出力してみました。
f:id:yutay:20200720105144p:plain:w30f:id:yutay:20200720105956p:plain:w30 (の異体字、MJ文字図形名 MJ030058) をJSONに設定しています。

テンプレート・JSONは以下のように作成しています。
サンプルはこちらからダウンロードできます。

  • テンプレート f:id:yutay:20200720110500p:plain

  • 文字を埋め込むセルのフォントをIPAmj明朝に設定しています f:id:yutay:20200720110517p:plain

データ(JSON)はユニコードエスケープで表現したものを準備します。

{
    "外字1": "\ud879\udfdd",
    "外字2": "\u9f4a\udb40\udd03",
    "外字3": "\ud878\udda8",
    "外字4": "\ud873\udf1c",
    "外字5": "\ud87a\udcd9",
    ...省略...,
}

このテンプレートとJSONを使って出力してみましょう。

f:id:yutay:20200720114353p:plain

全て問題なく出力されていますね…!

IPAmj明朝の文字一覧に存在する5万8,844文字は全て検証済みで出力可能となっています。

今回作成したサンプルは、無料トライアルページからも登録不要で試してみることが出来ます。 外字を扱う帳票の作成・出力が必要な際はぜひ試してみてください!

他にも様々な機能がありますので、ぜひアカウント無料登録してマニュアルを参照しお試しください。

*1:ただし、本当の意味の外字(任意のフォントをインストール)を扱うことは出来ません。よって「外字」という表記にしています。

*2:総務省の「市区町村が使用する外字の実態調査」報告書(平成24年3月)によると、IPAmjで、全国市区町村が使用する外字の95.52%をカバーできるとのことです。

Docurainの紹介動画を追加しました

Docurainの魅力をわかりやすくお伝えするために動画を用意しました!

公式サイトからご覧いただけますが、以下にもフルバージョンを掲載しておきます。

ムービー中で繰り返し触れられているのがコスト削減効果ですが、これは帳票の生産性を従来製品に比べて大幅に向上させているとも言い換える事が出来ます。

エンジニアの皆様向けに少し補足すると、従来の帳票生成ツールというのは、まずデータを取得するデータソースを定義して、クエリを定義して、罫線やボックスをマウスでポチポチ配置して、データによる条件分岐をコード(イベントハンドラ)で実装して、テキストのはみ出しが無いか最大長のテキストデータでテストして…という、かなり手間のかかる作業フローに多くの時間が割かれていました。

それを、多くの人が使い慣れたExcel上でデザインし、かつ、高度な条件分岐や各種集計処理、改ページ制御などなどまですべてExcel上で完結できるとしたら…?どうでしょう?

Excelでの帳票テンプレートのデザインは特殊なアドオンなどは一切不要です。プログラミングの経験がある方ならば、前提知識が一切なくともテンプレートを見ただけで何となく使い方を理解できる、そんな可読性の高い優れた仕組みを採用しています。

「コスト1/5」は本当なのか?盛ってるんじゃないの?と思われますよね?私ならばそういう感想を持ちます…。

それはぜひ登録不要のテストページや登録無料、試用期限なしのアカウント取得を通じて試してみて判断して下さい!!

キーブレイクによる改ページが簡単にできるようになりました

配列データ内の任意の項目(キー)が別の値になった場合に改ページしたいことがよくあります。例えば、請求明細の取引先が変わったら改ページ、のような感じです。 Docurainもこの要望を頂くことが多かったため、正式に「キーブレイク機能」として実装し、簡単に扱えるようにしました。

従来は任意の項目(キー)が別の値になったらページを分けたいという場合、該当項目の値ごとに分けた配列データとしてJSONを生成してください、というご案内をしていましたが、 キーブレイク機能により、単純な一次元配列のまま簡潔に記述することが出来ます。

早速試してみる

キーブレイク機能のサンプルのテンプレートとデータ(JSON)です。

ダウンロード f:id:yutay:20200602155129p:plain

[
  { "顧客名": "山田商店", "顧客ID": 100001, "商品": "みかん", "個数": 10, "単価": 100,  "請求額": 1000 }
  , { "顧客名": "山田商店", "顧客ID": 100001, "商品": "ぶどう", "個数": 15, "単価": 120,  "請求額": 1800 }
  , { "顧客名": "山田商店", "顧客ID": 100001, "商品": "バナナ", "個数": 5,  "単価": 200,  "請求額": 1000 }
  , /* 山田商店の明細がここに12個続く */
  , { "顧客名": "田中青果店", "顧客ID": 200001, "商品": "バナナ", "個数": 10, "単価": 100,  "請求額": 1000 }
  , { "顧客名": "田中青果店", "顧客ID": 200001, "商品": "レモン", "個数": 15, "単価": 120,  "請求額": 1800 }
  , { "顧客名": "田中青果店", "顧客ID": 200001, "商品": "メロン", "個数": 5,  "単価": 1200,  "請求額": 6000 }
  , /* 田中青果店の明細がここに7個続く) */
]

以下は↑のテンプレートとデータ(JSON)を使用してDocurainで出力したPDFです。
配列の各要素内の顧客名が別の値になったら改ページされていることがわかります。 f:id:yutay:20200602155152p:plain

データがどう変形されるか確認する

上記のサンプルデータのように一つの配列下に明細が並んでいるデータは、 $ENTITIES.chunk('顧客名') と記述することで 顧客名 をキーブレイクとして次のような二次元配列へと変換されます。

[
  [
    { "顧客名": "山田商店", "顧客ID": 100001, "商品": "みかん", "個数": 10, "単価": 100,  "請求額": 1000 }
    , { "顧客名": "山田商店", "顧客ID": 100001, "商品": "ぶどう", "個数": 15, "単価": 120,  "請求額": 1800 }
    , { "顧客名": "山田商店", "顧客ID": 100001, "商品": "バナナ", "個数": 5,  "単価": 200,  "請求額": 1000 }
    , /* 山田商店の明細がここに12個続く */
  ],
  [
    , { "顧客名": "田中青果店", "顧客ID": 200001, "商品": "いちご", "個数": 10, "単価": 100,  "請求額": 1000 }
    , { "顧客名": "田中青果店", "顧客ID": 200001, "商品": "すいか", "個数": 15, "単価": 120,  "請求額": 1800 }
    , { "顧客名": "田中青果店", "顧客ID": 200001, "商品": "メロン", "個数": 5,  "単価": 200,  "請求額": 1000 }
    , /* 田中青果店の明細がここに7個続く */
  ]
]

サンプルのテンプレートではこのトップレベルの配列を #foreach($dataGroup in $ENTITIES.chunk('顧客名')) のように繰り返しており、 上記のサンプルデータでは 顧客名 が "山田商店" の配列で1ページ目、"田中青果店"の配列で2ページ目が出力されることになります。

明細部の出力行数を制限

更に「1ページあたり10明細まで」のような制約を課したい場合は、以下のようにキーブレイクした配列を更に chunk(10) で分割します。 f:id:yutay:20200602155528p:plain

以下が上のテンプレートを使用してDocurainで出力したPDFです。(データは同じです)
顧客名が"山田商店"のデータは15個有りますが、1ページ目は10明細まで出力され、残りは2ページ目となっています。

f:id:yutay:20200602155414p:plain

#foreach($dataGroup in $ENTITIES.chunk('顧客名'))
  #foreach($dataOfPage in $dataGroup.chunk(10))
    ...
  #end
#end

と記述することで 顧客名 をキーブレイクとして顧客名ごとの二次元配列へ変形後、chunkで指定した10エントリごとの次のような配列に変形します。
(下記はイメージです。サンプル内ではforeachで繰り返すなかでchunk(10)により顧客ごとの配列をで10エントリごとの配列にしています)

[
  [
    [
      { "顧客名": "山田商店", "顧客ID": 100001, "商品": "みかん", "個数": 10, "単価": 100,  "請求額": 1000 }
      , { "顧客名": "山田商店", "顧客ID": 100001, "商品": "ぶどう", "個数": 15, "単価": 120,  "請求額": 1800 }
      , { "顧客名": "山田商店", "顧客ID": 100001, "商品": "バナナ", "個数": 5,  "単価": 200,  "請求額": 1000 }
      , ",...(山田商店の明細がここに7個続く)"
    ],
    [
      { "顧客名": "山田商店", "顧客ID": 100001, "商品": "みかん", "個数": 10, "単価": 100,  "請求額": 1000 }
      , { "顧客名": "山田商店", "顧客ID": 100001, "商品": "ぶどう", "個数": 15, "単価": 120,  "請求額": 1800 }
      , { "顧客名": "山田商店", "顧客ID": 100001, "商品": "バナナ", "個数": 5,  "単価": 200,  "請求額": 1000 }
      , ",...(山田商店の明細がここに2個続く)"
    ]
  ],
  [
    [
      { "顧客名": "田中青果店", "顧客ID": 200001, "商品": "いちご", "個数": 10, "単価": 100,  "請求額": 1000 }
      , { "顧客名": "田中青果店", "顧客ID": 200001, "商品": "すいか", "個数": 15, "単価": 120,  "請求額": 1800 }
      , { "顧客名": "田中青果店", "顧客ID": 200001, "商品": "メロン", "個数": 5,  "単価": 200,  "請求額": 1000 }
      , "...(田中青果店の明細がここに7個続く)"
    ]
  ]
]

今回使用したサンプルのテンプレートとデータ(JSON)こちらのページからも登録不要で試してみることが出来ます!

他にも様々な機能がありますので、ぜひアカウント無料登録してマニュアルを参照しお試しください。

チラシ・カタログ等の全面印刷PDFを作成できるようになりました

Docurain開発チームの矢森です。

チラシやパンフレット、カタログ、ポスターなどの全面印刷用(フチなし)のPDFが作成できるようになりました。 商業印刷設定に必要な仕上がりサイズや裁ち落とし領域が設定可能となり、つまりDocurainを簡易DTPソフトとして使用できます。

こちらが今回追加された商業印刷設定の機能を使用してDocurainにて出力したPDFです。 こちらからダウンロードできます。 f:id:yutay:20200522105419p:plain

Acrobat Readerにて確認すると裁ち落としサイズ、仕上がりサイズがガイドライン(青・緑)で表示されています。いわゆるデジタルトンボです。

実際に印刷会社様へデータを送って印刷をする際にはトンボが必要となることが多々あります。 このデジタルトンボが設定されていると、PDFのページサイズを変更し余白部分を作成後にデジタルトンボを元にトンボ(トリムマーク)を追加できます。 以下はページサイズを変更しトンボを追加したPDFです。 f:id:yutay:20200522105524p:plain

ページサイズを変更することでトンボを表示するエリアを追加し、トンボを追加しています。

PDF出力に使用したテンプレートは次の通りです。 実際のサンプルはこちらからダウンロードできます。 f:id:yutay:20200522105529p:plain

1,2行目でカスタムサイズを設定しています。 幅:216、高さ:303は仕上がりサイズのA4(210x297)に裁ち落とし領域を天地左右に3mmずつ設定するためのサイズです。

裁ち落とし領域を6mmにしたい場合は、

  • 天:6mm、地:6mm → 210 + 6 x 2 = 222
  • 左:6mm、右:6mm → 210 + 6 x 2 = 309

なので、

#set($paperWidth=222)
#set($paperHeight=309)

と設定します。

上記サンプルのA3〜A5のセルには余白調整や、裁ち落とし(塗り足し)領域の設定を記述しています。 各用紙サイズ(A3,A4,B5)で調整済みのテンプレートを既に用意済みです。よって実際にゼロから作成することは不要ですが、技術的に解説します。

以下は横・縦の余白調整のための値です。細かく確認・調整をして余白が出力されないようにします。

#set($bleedWidth = 2.0)    ## 横の余白調整値
#set($bleedHeight = 14.4)  ## 縦の余白調整値

以下は裁ち落とし(塗り足し)領域の幅・高さの値です。それぞれ3(mm)です。
(サンプルテンプレート内ではA5セルは非表示行となっていますので再表示で確認できます)

#set($trimWidth=($paperWidth.sub(210))/2)
#set($trimHeight=($paperHeight.sub(297))/2)

あとは#PDF_PROPERTY を使用して、各値をそれぞれ設定し完了です。

  • メディアサイズ(print.media.width/print.media.height)
  • 縦・横の余白調整値(print.bleed.x/print.bleed.y)
  • 裁ち落とし(塗り足し)領域の幅・高さ(print.trim.x/print.trim.y)

を指定する例は次の通りです。

#PDF_PROPERTY("
  print.media.width=$mediaWidth, print.media.height=$mediaHeight,
  print.bleed.x=$bleedWidth, print.bleed.y=$bleedHeight,
  print.trim.x=$trimWidth, print.trim.y=$trimHeight
")

今回使用したサンプルのテンプレートとデータ(JSON)もこちらからダウンロード可能です。 ぜひアカウント無料登録してお試しください。

カスタムサイズの用紙を指定できるようになりました

商業印刷では裁ち落としのために標準サイズよりも数mm大きなサイズの用紙に印刷する必要がよくあります。

しかしDocurainから出力した帳票は、今までは標準的なサイズ(A判、B判など)でしか出力出来ませんでした。しかし今回のアップデートでPDF出力を行う場合に、標準の用紙サイズ以外のカスタムサイズを指定できるようになりました!

ちなみに、カスタム用紙サイズを出力できないというのはExcelの仕様によるものです。DocurainはExcelをテンプレートとして用いるため、必然的にExcelの仕様の制約を受けます。Excelではアプリ上でカスタム用紙サイズをサポートしていないんですよね…。WordやPower Pointでは出来るのですが。

そういった背景もあり、今回対応するカスタム用紙サイズ機能もPDF出力の場合のみの対応になります。

指定方法は、「PDFとExcelのセキュリティ関連機能が追加されました」で紹介した #PDF_PROPERTY を使用します。

具体的には、

#PDF_PROPERTY("print.media.width=310,print.media.height=220")

のように、幅と高さを指定します(単位はmm)。

今回作成したサンプル帳票はこちらからダウンロードできます。

サンプル帳票には上記で指定した #PDF_PROPERTY("print.media.width=310,print.media.height=220") がそのまま指定されています。A4(210 x 297)よりも1cmほど大きいサイズを指定してみました。※横向きの帳票なので縦横は逆になっています。

これでPDF形式で帳票を出力してみます。下記のような帳票(車検証)が出力されます。

f:id:withpop:20200409165701p:plain

見ただけでは指定したサイズになっているかどうか分かりませんね…。

Acrobat Readerから用紙サイズを確認してみます。

f:id:withpop:20200409165448p:plain

ページサイズが指定した通りになっていますね。

ここで、注意点がいくつかあります。

1つ目は、この機能は前述したように裁ち落としを含めた少し大きいサイズの用紙で印刷することを想定しています。Excelの印刷設定で指定した用紙よりも小さいサイズを指定することは出来ません(そのような指定は無視されます)。

2つ目は、コンテンツの位置です。PDF内のコンテンツ(テキストや罫線、画像など)は上下左右中央に位置するよう調整されます。つまり、縦横それぞれ10mmずつ大きいサイズを指定した場合は、上下左右にそれぞれ5mmずつの余白が出来ます。これを見越してレイアウトを行って下さい。

3つ目は、余白についてです。Excelの印刷設定でも余白(とヘッダー・フッター)のサイズは指定できますが、最終的に表示される余白はExcel上で指定した余白に用紙サイズが伸びた分が加算されます。これは若干分かりにくいので、Excel上で余白設定をすべてゼロで指定しておくことをおすすめします(こうすればサイズを大きくした分がそのまま余白となる)。

今回作成したサンプル帳票は、こちらのページからも登録不要で試してみることが出来ますので、気になったらぜひ試してみて下さい。

PDFとExcelのセキュリティ関連機能が追加されました

帳票開発の現場では、

  • システムから出力したあとに利用者が編集するのでExcelで出力したい
  • システムから出力したあとは編集させたくないのでPDFで出力したい

という正反対の2パターンの要望をよく聞きます。

DocurainはExcel、PDFどちらの形式でも出力が可能ですが、「編集させたくない」という用途ではちょっと機能不足な面がありました。

「編集させたくないのでPDFで出力したい」というのは、正確には誤りです。Adobe AcrobatなどのPDF編集ソフトウェアを使用すればPDFの編集は可能です。フリーソフトでもいくつか簡単なPDF編集が行えるものはありますね。ですから、「出力された帳票はExcelファイルを編集するのと同じような気軽さで編集して欲しくない」という用途ではこれでいいと思うのですが、「絶対に編集するのは禁止」という場合には対応できませんでした。

が、今回の機能追加でそのような要望にも対応できるようになりました。

Docurainで出力ファイルを保護する方法

テンプレートにセキュリティ設定を追記するだけです。

f:id:takahashikzn:20201001195027p:plain

#BOOK_PASSWORD の第一引数は閲覧パスワード、第二引数は編集パスワードになります。Excel出力時もPDF出力時も有効です。編集パスワードだけを指定することもできます。 #PDF_PROPERTY はその名の通りPDFの属性設定で、

  • 「印刷」の可否
  • 「劣化印刷」の可否
  • 「文書の変更」の可否
  • 「文書アセンブリ」の可否
  • 「内容のコピー」の可否
  • 「アクセシビリティのための内容の抽出」の可否
  • 「注釈」の可否
  • 「フォームフィールドの入力」の可否
  • 暗号キー長

を指定できます。上記の例は印刷禁止、編集禁止ですね。

PDF出力してみる

今回使用するテンプレートとJSONはこちらです。

まずはPDFファイルで出力してみましょう。

f:id:withpop:20200228092930p:plain

Acrobatで開くとこのようにパスワードを要求されます。

f:id:withpop:20200228093027p:plain

Chromeで開くとこうなります。

パスワードを入力すると閲覧できます。

f:id:withpop:20200228093127p:plain

では続けてAcrobatで編集してみましょう。すると、またパスワードを要求されます。

f:id:withpop:20200228093226p:plain

編集用パスワードを入力すると編集できるようになります。

f:id:withpop:20200228093524p:plain

Acrobatから文書のセキュリティ情報を見てみました。指定したとおりに印刷が禁止されています。

f:id:withpop:20200228093716p:plain

メニュー上では「印刷」がグレーアウトして印刷できないようになっています。

f:id:withpop:20200228093901p:plain

Excel出力してみる

では次にExcel出力してみましょう。

f:id:withpop:20200228094158p:plain

出力したExcelファイルを開くとパスワードを要求されます。ここで設定した閲覧用パスワードを入力すると、

f:id:withpop:20200228094343p:plain

このように続けて編集用パスワードを要求されます。ここで「読み取り専用」で開くと、Excel上での編集は可能ですがファイルへの保存は出来なくなります。

まとめ

というわけで、今回の機能追加によりかなり細かく出力された帳票のセキュリティ設定が可能になりました。

これで、「出力された帳票を(Excelで)編集したい」「カジュアルな編集を防ぎたい」「絶対編集するのはダメ」すべてのパターンにDocurainは対応できます。

これらすべての要望を、ここまで簡単に対応できる帳票ソリューションはDocurain以外にありません。 もし気になった方は登録して触ってみてください。無償でトライアルできます!