Docurain Labo

Docurainサービス開発日記

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

商業印刷では裁ち落としのために標準サイズよりも数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:withpop:20200228092345p: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以外にありません。 もし気になった方は登録して触ってみてください。無償でトライアルできます!

日本の全帳票を出力するのは俺達だ!!〜1時間あたり4億ページを出力し続けるシステム

前回更新から時間が空いてしまいましたが、1ヶ月前くらいに新しい成果が出たのでご報告します。

我々の開発している帳票システム、Docurainですが、日々パフォーマンス向上・安定性向上・機能拡張に勤しんでおります。 パフォーマンスに関しては前回約5,000ページのPDFファイルをExcelファイルから9秒で出力しましたが、よりパフォーマンス向上を目的としてチューニングと試験を繰り返してきました。

我々の帳票生成エンジンは分散処理をすることが可能です。理論的には、処理するマシンの数に応じて青天井でパフォーマンスが伸びていきます。が、実際に数百というオーダーのサーバを束ねて運用した経験のある方なら分かってもらえると思いますが、実際は様々なボトルネックがあらゆるところに存在し、「分散処理できれば性能は青天井」などというのは夢物語であります。

そういうわけで我々は分散処理できてるからOK、ではなく、理論通りにサービスがスケールしていくこと、そこでクリティカルなエラーが発生しないことを実際に何度も試験しています。

というわけで前置きが長くなりましたが、この度の試験で実測値で

395Mpph

という結果を得ることができました。

pphというのは何かと申しますと、これは分かりやすく「帳票のパフォーマンス」を測定する指標が無いので「1時間あたりPDFを何ページ出力できるか」を表した単位を作り、社内で使用しています。「pph」は「Pages Per Hour」の略です。

なので395Mpphというのは1時間に3億9500万ページ、約4億ページ弱のPDFを出力できるということになります。繰り返しますが、これは 理論値ではなくて実測値 です。

日本国内でPDF形式の帳票が何ページ出力されているかはよくわからないのですが、1時間4億ページ弱も出力できたらもしかしたら日本の国内需要を満たしてしまうのでは…?と考えてしまいますね。いや、根拠は無いですが。でもまぁ私個人の気持ちとしてはゆくゆくは日本全部は非現実的としても、日本の帳票出力の何割かの出力を担えるようになりたいと思い、開発を続けています。

あと、これは十分にバックエンドのサーバがスケールした状態での結果なので常時この値が出るわけではありません。が、我々は高いパフォーマンスが必要とされているのならば、何としてでもそれを提供したいと思っています。

以上、Docurainは1時間あたり4億ページ弱のPDFを出力し続けますよ!という紹介でした。

6360ページのPDFを爆速で出力して経産省を援助する(CSVもあるよ)

こういうニュースを見ました。

news.careerconnection.jp

タイトルの通りでございますが、経産省3600ページのPDFでキャッシュレス還元対象店一覧を公開したとして、「読みにくい」「CSVかExcelにしろ」と文句を言われております。結構話題になったので、CSVとかExcelとかもそのうち公開されるんだろうなーって思ってたらこんなことになってました。

nlab.itmedia.co.jp

9月5日時点の加盟店登録申請は全国で約58万店。今後これを1ファイルで全て網羅すると、PDFファイルは1万ページの大台を超えてくるかもしれません。

すごい!少年漫画でよくある戦闘力のインフレみたいな感じですね。さすが、これでこそ我らが愛すべき日本国行政機関です。

まぁ本ブログにたどり着くような方々はおそらくITリテラシもお持ちでしょうから、こんな記事を見ると「これだから日本はIT後進国なんだ!さっさと検索機能を付けるとかマップ表示するとかしろ!!」と思うことでしょう。私もそれは思います。ちなみに記事執筆時点で確認した所、「9月中下旬には地図上に対象店舗を表示するウェブ機能やアプリを公開予定」と書いていますね。開発中のエンジニアの心労を察するに色々とアレですが…。

でも、こういうのって話題になってないだけで結構ありますよね。市町村のホームページとか、さすがに数千ページは無いにしても数十ページ、ずっとこういう店舗情報的なものがずらずらと並んでるPDFがあったりします。一方で厚労省の統計情報みたいなものはExcel形式でも配布されてますし、この差はなんなのかなーと昔から不思議でした。おそらくは、CSVやExcelといったファイルを扱えるのもそれなりのITリテラシがある人なので、こういうファイルを公開すると電話の問い合わせで


「お前のところでダウンロードしたエクセルが開けない」

「それは大変失礼しました、閲覧にはExcel 2007以降がお使いのPCにインストールされている必要がございます」

「なんだそれは、エクセルなら入っているぞ、バカにするな」

「申し訳ございません、エクセルの中でも2007というバージョン以降という制限がありますが、それに引っかかっているかも、と」

「なんだその2007とかいうのは。俺のパソコンにはそれが入っていないというのか。どうやったらわかるんだ」

「ええっと、まずはExcelを起動してですね…」

「だからそのファイルをダブルクリックしてもExcelが起動しないんだからしょうがないじゃないか」

「そうでしたね、ではスタートメニューから…」

「スタートメニューとは何だ」


という「誰でも簡単!パソコン教室電話サポートコーナー」みたいな地獄のやり取りを公務員の方々が対応するということになることは想像に容易いわけです。であるならば、PDFで公開しておけばスマホでもPCでもまず間違いなく見れるし、面倒くさいことを言われなそうという判断になっても仕方ないのかなーと思いましたが。一方で統計情報を参照したいなんて人は当然、Excelなんかも使いこなせてるでしょうから厚労省とかではExcelでも配布してるんでしょう。多分。全部想像ですが。でも私が上司で部下がこういう電話の対応に苦慮してたら、「いいよもう、PDFで公開しろよ。PDFに検索機能はあるんだから、それで十分じゃん」って言いますね。きっと。

話が逸れましたが、で、まぁ6360ページのPDFで、今後は1万とかになるかもしれないということですね。よく分からないですが、この経産省の中の人も何らかの事情があってPDFで公開する作業をしているのでしょう。そして、この地図表示するアプリとやらの開発状況によっては、暫くはこの方法を継続することになり、その都度PDFを何度も更新してアップロードするという作業が必要なわけで、ちょっと面倒ですよね。6360ページともなると、PDF出力するのも時間がかかりますし…。試しに、手元で5,000ページ位のExcelファイルを、Excelの機能でPDFへ変換した所、15分かかりました。毎回これをやるのはちょっと…。

…えっ、時間がかかる?本当に?

9秒でできますよ。そう、Docurainならね。

ExcelをテンプレートにしてJSONのデータを流し込み、帳票を作成するサービスのDocurainですが、処理速度にも気を配って開発しております。具体的には、こういった数千ページにも達する大量のPDFを出力する際は複数台のサーバーで分散処理が行えるようになっています。この分散処理を担当するサーバは負荷状況によって自動でスケールするようになっているので、理論的にはネットワーク容量の限界までどこまでも性能が向上していきます。(厳密には「分散した1個のタスクの完了+ネットワーク転送時間」以下には出来ませんが)

というわけでDocurainで同様の帳票を作成してみました。Excelのテンプレートとjsonのデータを利用して作成した出力結果は以下のようなものになります。

f:id:withpop:20190909113229p:plain

このテンプレートで経産省で公表された店舗データ(EC店舗除く)をすべて表示した所、5534ページのPDFとなりました。このとき、十分にスケールしたという状況を再現してのテストではありますが、先程説明した性能(9秒)が達成できました。

f:id:withpop:20190909111834p:plain

使用したテンプレート、JSONデータと出力データは以下です。CSVデータもこちらに含まれているので、必要な方は使ってください。JSONデータは50件に件数を減らしたものを同封しています。

データ一式

50件のデータならば登録不要でお試し頂けるこちらの体験ページでもJSONとExcelテンプレートからPDFを出力できます。

また、Docurainは単一リクエストの早さだけでなく大量のリクエストを同時に処理したときのスループットの早さも売りです。こちらも同様に今回のテンプレートで試してみた所、 30,546ページ/秒 という速度が出ました。すごい。

しかも、まださらに性能向上の余地があるので近々もっと良い結果を報告できるかも知れません。

ただ、いくつか注意事項があります。まず、この分散処理は有償オプションです。使用する場合は別途お申し込みが必要です。また、先程説明したとおりサービスは負荷状況によってスケールしていく仕組みなのでいつでもこの性能が出来るわけではありません。大量の帳票を出したい!という場合は詳しくはご相談ください。

ちなみにこういう何百何千ページにも達する帳票を印刷する必要が本当にあるのか?と思う方も多いと思いますが、我々は実際にそのような要望を複数の顧客から受けています。 「そんな大量のPDFを出力しても誰も見ないでしょ」という指摘が真っ当な場合もあるでしょう。一方で、最大で数千ページのPDFを出力できることが仕様として定められているシステムがある場合、実際にそういう使う方をするか否かとは無関係に、その機能が実際に動作するようにしなければなりません。例えばext4ファイルシステムにおける仕様上の最大ファイルサイズは16TiBですが、その時「実用上は16TiBのファイルなんてありえないから、1TiBが現実的な最大ということでもいいよね」という話はビジネスシーンでは通用しません。仕様とは約束事だからです。

そういうわけで、大量のページを出力するニーズが実際にあるので、Docurainは現実的なコストと時間でそれを実現する手段を提供しています。

詳しくは公式ページの情報もご参照ください。みんなの連絡待ってるぜ!!

docurain.jp

PDF→Excel変換機能を公開しました!

DocurainはExcelで帳票テンプレートを作れるサービスです。

が、色んなところでデモをさせていただくと、「今は別の帳票ツールを使っているから、それをExcelに移行するのはしんどいな…」という反応を頂くことがたまにあります。

一から帳票を作る場合、またはそもそも既に現在Excelで帳票を作っている場合にはExcelで帳票テンプレートを作るというのは大変楽なのですが、既に何らかの別の帳票ツールを使っているという場合は「これを一からExcelで作るのは面倒だな…」というふうになってしまいます。これは仕方ないことです。その乗り換えのコストを支払ってあまりあるメリットがある、というのが見えないと導入することは難しいですからね。

どんな帳票ツールでもPDF形式では出力できるはずなので、今回公開した機能を使えば、PDF帳票をExcelに簡単に変換できてしまいます。もちろん乗り換えに関わらず、今PDF形式の帳票は既に存在するというシーンではこの機能を活用出来ます。

ただ、ここまで書いたら、そんなにきれいに変換できるのか?と疑問に思う方もいるかと思われます。

自由にコンテンツを配置できるPDFから行列が定まったグリッド形式のExcelに変換するわけですから、人間が見て完全に満足できるほどにきれいなExcelファイルに変換するのは正直難しいです。

が、変換したあとで人間が手をくわえてちょっと修正することを前提にすれば、十分実用になるレベルだと我々は考えています。では実際の帳票を見ましょう。

以下が元々のPDF帳票(車検証)です。

f:id:withpop:20190829181930p:plain

Excelに変換したあとがこちらです。

f:id:withpop:20190829182831p:plain

どうでしょうか?かなり高精度に変換されています。

Docurain開発チーム内で本機能を使用し、ネットに公開されている市町村の申請書PDFファイルなどを変換して色々試してみましたが、いずれもテンプレートを作るベースとしては十分実用になると判断しています。アカウントを無料登録して頂ければ試すことができます。ご興味があればぜひお試し下さい!!

APIを微修正しました(xlsとxlsx)

小改良です。

現在、Excel形式での出力を行う場合のエンドポイントは、事前に保存されたテンプレートの場合

https://api.docurain.jp/api/xls/[テンプレート名]

となり、インスタントAPIだと

https://api.docurain.jp/api/instant/xls

を指定します。

ただ、これはExcel 2007以降の拡張子(xlsx)と紛らわしく、 xlsxlsx と誤記してしまいがちなため(私自身もやってしまったことがあります…)、 xlsxxls と指定したときと全く同じ動作をするようにしました。

つまり、上記のエンドポイントは

https://api.docurain.jp/api/xlsx/[テンプレート名]

https://api.docurain.jp/api/instant/xlsx

と完全に同一です。

この二つは出力タイプをExcel 2007形式で出力するか、それとも97-2003形式で出力するのかを選択するものでは ありません ので注意してください。

Excel形式で出力した結果がExcel 2007形式であるのか、それとも97-2003形式であるのかは使用したテンプレートがどちらであったかに依存します。Excel 2007形式のテンプレートを使用して出力すればExcel 2007形式で出力されます。97-2003形式のテンプレートを使用して出力すれば97-2003形式で出力されます。

こういった細かい変更はブログでは紹介せずドキュメントの更新にとどめていましたが、これからは積極的にブログでも告知していきますので、Docurainユーザーの方はぜひ当ブログも継続的にウォッチして頂ければ幸いです。

よろしくお願いします!