Copper PDF 2.0.6/CSSJ 1.2.11/Javaドライバ 1.0.7[高負荷時にPDFが破損するバグ修正]

高負荷時にPDFが破損する可能性がある問題を修正したCopper PDF 2.0.6/CSSJ 1.2.11をリリースしました。以下のページからそれぞれダウンロードしてください。

Copper PDFのダウンロード
CSSJのダウンロード

今回見つかった問題は、PDFの相互参照表(クロスリファレンステーブル)が破損するもので、特にサイズの小さなPDFを非常な高負荷で出力する状況で不定期的に発生する可能性があるものです。申し訳ございませんが、早めのアップデートをお願いいたします。

また、Copper PDFでは他にHTMLの処理に関する9件のバグを修正しました。詳細は配布物のREADME.txtをご参照ください。

また、Javaドライバ 1.0.7をリリースしました。今回のリリースではサーバー側が強制停止した場合に、ドライバの処理が固まってしまう問題を修正しました。Javaドライバのダウンロードページからダウンロードしてください。


PDF

PukiWikiプラグイン1.3をリリースしました。

PukiWikiプラグイン・バージョン1.3をリリースしました。新しいバージョンでは、現在表示中のページを手軽にPDF化する機能や、スタイルの切り替え、暗号化機能が追加されました。

SourceForgeのダウンロードページから入手してください。

PukiWikiプラグインのマニュアルはこちらです。


PDF

Copper PDF 2.0.5をリリースしました[SVGに関係するバグフィックス]

SVG画像を含む文書を複数同時にPDF化すると、エラーにより処理が停止する問題が見つかりました。申し訳ございませんが、SVGを利用されている方はアップデートをお願いいたします。

Copper PDF 2.0.5を「Copper PDF サーバーのダウンロード」から入手してください。


PDF

Copper PDF 2.0.4をリリースしました

Copper PDF 2.0.4をリリースしました。「Copper PDF サーバーのダウンロード」から入手してください。

SVGのグラデーション塗りに対応しました。

画像出力の解像度を指定できるようにしました。

“output.image.resolution”で解像度(dpi)を指定できます。

以下のバグを修正しました。

  • 絶対配置されたボックスの先頭でtext-indentが適用されない。
  • fonts.xmlのfont-dirで指定されたディレクトリ内の.otfファイルが読み込まれない。
  • “output.default-font-family”でクォートで囲ったフォント名が使えない。
  • インラインテーブルが含まれる文書でエラーになる。
  • インラインボックスの中にclearが指定されたボックスが存在する文書でエラーになることがある。
  • {list-style-position: outside;}で配置されたマーカーがリストの左マージンに入り込んでしまう。
  • 起動直後に高負荷がかかると、OpenTypeフォントが正常に表示されなくなることがある。
  • colspanで結合されたセルの有るテーブルで、テーブルの幅が必要以上に大きくなることがある。
  • 絶対配置されたボックスの中に固定配置された画像を配置すると、位置がページ基準にならない。
  • コメントの認識方法が一般的なブラウザと異なる場合がある。
  • rowspan, colspanの両方が指定されたセルが存在する固定レイアウトテーブルでセルの位置がずれる。
  • 半角カンマやピリオドの直後で折り返しが発生する。
  • {windows: 0; orphans: 0;}が適用されない。
  • テーブルの下境界がページ境界にさしかかった場合にエラーで停止する。
  • テーブルセルの幅の%指定が正しく反映されない。
  • 高さが指定され、rowspanが指定されたテーブルセルが改ページで分割されない。

IE互換モードで以下の修正をしました。

  • テーブルに{width: 0;}が指定されているとき自動幅でレイアウトする。
  • テーブルセルにoverflow: visible;を適用しない。
  • 行末の全角スペースの修飾(text-decoration)を表示しない。

PDF

PHPドライバ1.1.2リリース

Copper PDF PHP用ドライバ 1.1.2をリリースしました。

PHPドライバでCopper PDFに接続したときに、サーバ側エラー等でCopper PDF側から接続が切断された場合にPHP側で処理が停止してしまう(プロセスがタイムアウトするまで停止する)不具合を修正しました。

修正版はPHP ドライバのダウンロードからダウンロードしてください。


PDF

個人利用ライセンスの発行を開始いたしました

Copper PDF 2.0.3より、試用できる機能を一部だけに限定した個人利用ライセンスを発行いたします(個人利用ライセンスの機能制限について)。個人・非営利団体の利用、教育機関による教育目的の利用に限り、Copper PDFサーバーをご利用いただけます。従来の試用ライセンスと異なり、「すかし」は表示されません。

ライセンスキー発行フォームから指定のメールアドレスへお送りいたします。


PDF

無料版の制約について

無料版では、以下の機能制限がされています。

1. 入出力プロパティがデフォルトに固定され、変更できません。ただし、次のプロパティは除きます。

  • input.default-encoding
  • output.pdf.bookmarks
  • output.pdf.hyperlinks
  • processing.page-references
  • processing.pass-count

2.次のCSSプロパティ(Copper PDFの拡張)は設定できません。

  • -cssj-font-policy

原則としてA4サイズでCID-Keyedフォントを使用したPDFを出力可能です。


PDF

Copper PDF 2.0.3をリリースしました

Copper PDF 2.0.3をリリースしました。「Copper PDF サーバーのダウンロード」から入手してください。

OpenType/CFF(OTF)フォントをサポートしました。

font.xmlファイル内のfont-file, font-dir要素により、.otfファイルを読み込むことができます。

fonts.xmlでフォントを使用する文字範囲を指定できるようにしました。

cid-keyd-font, font-file, system-font要素内に以下の要素を含めることにより、文字範囲を追加・除外することができます。
[ユニコード範囲]はU+FFFF, U+FF??, U+0000-FFFFといった形式の16進ユニコード範囲です。
<include unicode-range=”[ユニコード範囲]” />
<exclude unicode-range=”[ユニコード範囲]” />

文書情報を入出力プロパティで設定できるようにしました。

以下のプロパティで文書情報の名前と値を設定することができます。
[n]は0から始まる通し番号です。
“output.meta.[n].name”
“output.meta.[n].value”

画像の出力をサポートしました。

“output.type”にJava Image I/Oがサポートする画像形式(MIME型)を指定することにより、
画像形式で出力されるようになりました。
ただし、コア14フォントとCID-Keyedフォント(フォント設定ファイルのcid-keyed-font要素によるもの)は正確に描画できません。

改ページを強制的に抑制するモードを追加しました。

“output.no-page-break”をtrueにすると、改ページを行わなくなります。
“output.auto-height”と異なり、ページ高さが固定されます。

印刷面のクリッピングの有無を設定できるようにしました。

“output.clip”をfalseにすると、印刷
面の外(トンボや用紙の外の領域)にはみだした部分を描画します。

JPEG/JPEG 2000への画像変換をサポートしました。

“output.pdf.jpeg-image”の値にrecompressを加えました。(to-flate)と意味は同じです。

“output.pdf.image.compression”に次の値を指定できるようにしました。
flate – 可逆圧縮
jpeg – JPEG
jpeg2000 – JPEG2000

“output.pdf.image.compression.lossless”には可逆圧縮以外の画像を適用する
画像ファイルサイズの閾値(縦と横のピクセルサイズを足したもの)を設定できます。
デフォルトは200です。

PDF 1.7でファイル添付する際にユニコード形式の説明をつけられるようになりました。

{text-align: justify;}による両あわせが、より一般的なブラウザに近くなりました。

以下のバグを修正しました。

  • 浮動ボックスの直後に{white-space: nowrap;}が設定されたインラインがあると、幅が足りない場合もインラインの前で折り返しがされない。
  • 絶対位置指定された画像にマージンを指定すると、マージンの分だけ内部のサイズも大きくなってしまう。
  • 相対位置指定されたボックス内に絶対位置指定されたボックスを配置した場合、bottomプロパティ通りに配置されない。
  • 固定レイアウトテーブルでテーブルカラムのspanを指定した場合と、カラムの幅の合計がテーブル幅より小さいときの幅が正しくない。
  • 固定位置指定されたボックス、固定された背景がページマージンの外に合わせられる。
  • 境界があり、固定位置指定された画像が指定より大きくなる。

PDF

Copper PDFの速度と処理能力

Copper PDFの高速処理の秘密は、PDFのように内容が表示順になっていないデータを直列化し、再構築する独自のPDF出力プログラムと通信方式です。処理能力が非常に高いことから1台だけのサーバーでもほとんどの用途には十分ですが、生成途中のPDFを直列化してソケット通信でドライバに渡すため、負荷分散が容易であり、ハードウェアを増設することでどのような過酷な運用にも耐えられるのが特徴です!

このページではCopper PDF 2.1.0のパフォーマンス測定結果を公開しています。使用した環境は次の通りです。

DELL PowerEdge 840
CPU: Intel Xeon X3230 2.66GHz/8MB L2キャッシュ/1.066MHzFSB)
メモリ: 4GB
OS: Debian etch 4.0r6 (カーネル2.6.26 amd64)
Java: Sun JDK 1.5.0_14 64-Bit Server VM
2009年1月現在、30万円未満で購入できる安価なサーバーです。

申請書の出力

某自治体の保有個人情報開示請求書(大抵の自治体にある申請書類です)を10のスレッドで同時アクセスしてそれぞれ100回、合計1000回出力しました。
対象文書 / 処理結果

接続方法 通常のドライバ HTTP/RESTインターフェース
処理時間 12406ms 17006ms
平均レスポンス時間 119.1ms 161.7ms
スループット(処理能力) 80.6/s 58.2/s

10人の市民が同時アクセスして毎秒50枚以上の申請書を作成するというのは、まずあり得ないような高負荷ですが、0.1~0.2秒程度で結果を返します。マルチスレッドに対応しているため、特にマルチコアCPUの環境では同時アクセス数が増えてもレスポンスタイムはあまり変わりません。

Copper PDF 2.1からサポートされたHTTP/RESTインターフェースでは、30%程度の速度低下がありますが、実用上は全く問題ありません。

520ページの英文仕様書の出力

W3CのXSL 1.1のドキュメント(図も含まれる大きな技術文書)を1つのスレッドで5回変換しました。
対象文書 / 処理結果

処理時間 ページ/秒
28775ms 18.07
5267ms 98.73
4675ms 111.2
4682ms 111.1
4505ms 115.4

1回目はウォームアップ(JavaのJITコンパイラやフォントキャッシュ)のために若干時間がかかりますが、2回目以降は安定して約100ページを1秒で返すというパフォーマンスを発揮しています。

1474ページの和文法令文書の出力

租税特別措置法(日本で一番長文と言われる法律)を1つのスレッドで5回変換しました。
対象文書 / 処理結果

処理時間 ページ/秒
9282ms 158.8
5762ms 255.8
4932ms 298.9
4888ms 301.6
4892ms 301.3

図が含まれない法令文書の場合は非常に高速で処理できます。ウォームアップが終わって安定稼動に入った状態であれば200ページの出力に1秒かかりません。
また、処理途中のPDFを直列化してドライバに渡した後、サーバー側では逐次データを破棄するため、無駄にシステムのリソースを消費することがなく、このような長大なPDFでもストレスなく出力できます。


PDF

Copper PDFドライバにApacheライセンスを適用しました

Copper PDFドライバは当初からソースを公開した状態で配布してきましたが、この度Apache License 2.0を適用し正式にオープンソース製品としました。これにより、他のソフトウェアと共にCopper PDFドライバを再配布しやすくなります。

現在、SourceForge.jpにソースおよびバイナリを新しいライセンス文書と共に公開していますが、Apache Licenseは過去に配布されたCSSJドライバのソースにも適用されているものとします。

また、Copper PDFサーバー・ドライバ間の通信プロトコルもオープンとし、他社がドライバを作成して販売することや、他の製品に利用することも原則自由となります。

また、以下のソフトウェアにもApache Licenseを適用し公開しました。

いずれもSourceForge.JPで公開しています。


PDF