Rubyドライバをリリースしました

日本発のプログラミング言語で、ウェブ開発等でも定評のある、Ruby対応のドライバをリリースしました。以前もJRubyでJavaのドライバを使う方法があったのですが、今回は本当にRubyのために開発されたドライバです。

JavaならJSP、PHPならSmarty、PerlならTemplate-Toolkit、C#/VB.NETならASPのように、Copper PDFはそれぞれの開発言語でのウェブ開発との親和性を第一としてきましたが、Rubyも例外ではありません。

例えば、ERBで作ったテンプレートでPDFを出したければこのようになります。

require 'CTI'
include CTI
require 'erb'

# セッションの開始
get_session('ctip://localhost:8099/',
{
  'user' => 'user',
  'password' => 'kappa'
}
) do |session|
  # テンプレートを変換
  session.transcode do |out|
    begin
      $stdout = out
      ERB.new(DATA.read).run
    ensure
      $stdout = STDOUT
    end
  end
end
__END__
<html>
  <head>
    <title>ERB</title>
  </head>
  <body>
  <p>Hello ERB</p>
  <p>ただいまの時刻は <%= Time.now %></p>
  </body>
</html>

Rubyプログラマの方は、ぜひお試しください。驚くほど簡単にPDFを出力することができます。

ドキュメント

Rubyドライバ ドライバ主要部分 全API サンプルプログラム・解説

ダウンロード

sourceforge.jpで配布しています


PDF

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

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

UNICODEの制御文字が含まれる文書で文字化けが発生していた問題、不正なXML宣言を含むHTMLの処理に関するバグを修正しました。

また、Copper PDFにはページ数の制限機能がありますが、従来は制限に達するとエラーとなり出力結果が得られなくなっていたのを、途中までのページをPDFとして出力する機能を追加しました。

変更点

UNICODE制御文字の扱いについて変更しました

・以下の文字を幅ゼロの文字として認識するようにしました
U+200B
U+200C
U+200D
U+200E
U+200F
U+202A
U+202B
U+202C
U+202D
U+202E
U+2060

・以下をスペース文字として認識するようにしました
U+200B
U+200C
U+200D
U+200E
U+200F
U+202A
U+202B
U+202C
U+202D
U+202E
U+2060

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

・XML宣言が2つ以上あるとページが出力されない

以下の機能を追加しました

“output.page-limit.abort”に”normal”を追加することで、”output.page-limit”でページ数を制限した際に、途中までのページをPDFとして出力するようにしました。


PDF

Java版ドライバ 2.1.3をリリースしました。

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

ドライバ付属のCommons HTTP ClientでHTTP通信を行った時に、
NoClassDefFoundError: org/apache/commons/logging/LogFactory
が生ずるバグを修正しました。
Tomcat等のサーブレットエンジンから使用した場合には影響ありません。

サンプルを追加しました

Antで文書を一括変換するサンプルのbuild.xmlファイルを加えました。

copperコマンドのシェルスクリプト、batファイルを加えました。
これらについては、以下のドキュメントを参照して下さい。
https://dl.cssj.jp/docs/copper/3.0/html/2100_tools.html#admin-copper

こちらからcti-java-2.1.3をダウンロードして下さい。


PDF

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

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

変更点

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

“output.page-margins”に4つの値を指定するとエラーになる
インラインブロックの中に大きさを%指定した画像があると、画像の大きさがゼロになる

SELECTフォームパーツの表示をブラウザに近くなるように改善しました

文字コードの検出を一般的なブラウザに準拠するようにしました

XHTML(拡張子.xhtmlでMIME型”application/xhtml+xml”の場合)
1. UTF-8, UTF-16のBOM
2. XML宣言

HTML(拡張子.html, .htmでMIME型”text/html”の場合)
1. UTF-8, UTF-16のBOM
2. HTMLのMETAタグ(複数METAによる指定がある場合は最初の指定を優先する)
3. XML宣言


PDF

バージョン3.0.7からアップグレードしたCopper PDFが起動しない場合の対処方法について

Copper PDFバージョン3.0.7を、.rpmまたは.debパッケージにより3.0.8以降にアップグレードした際に、Copper PDFが起動しなることがあります。これは、3.0.7の.rpmまたは.debパッケージに不具合があり、必要なユーザー(copper)が削除されることが原因です。他の方法でインストールした場合は影響ありません。

対処方法

rootで以下のコマンドを実行してcopperユーザーを追加することで起動するようになります。

/usr/sbin/groupadd -r copper
/usr/sbin/useradd -r -d /var/lib/copper-pdf -c “Copper PDF” -s /bin/nologin copper -g copper
chown copper:copper /etc/copper-pdf/password.txt


PDF

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

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

変更点

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

画像(PDFではなくPNG, JPEGなど))として出力時に縦書きの文字が2重3重に描画される
<input type=”text”> に width:auto; を指定すると幅が0になる
<input type=”file”> のテキストボックス部分が2重に表示される

以下の優先順位でHTMLの文字コードを認識するようにしました

1. UTF-8, UTF-16のBOM
2. XML宣言
3. HTMLのMETAタグ(複数METAによる指定がある場合は最初の指定を優先する)
従来はBOMが認識されず、複数のMETAタグが存在するとHTMLが正しく読み込まれない不具合が生じていました

一般的なブラウザとの互換性を向上させました

‘*’をHTMLの要素名の中に使えるようにしました。 <a*> のような名前のタグを使用でき、CSS内で a* {color:Red;} のような指定ができます
フォーム要素(INPUT, SELECT, BUTTON)は上位の要素のフォントサイズの影響を受けないようにしました
プルダウンメニュー(SELECT)のボタンを表示するようにしました


PDF

Q. RESTインターフェースで大きなデータをPOSTするとエラーになります。

RESTインターフェースでCopper PDFにアクセスする場合、パラメータが application/x-www-form-urlencoded 形式だと、POSTできるサイズに上限があります(概ね190KB)。

大きなデータをRESTインターフェースで送る場合は、multipart/form-data 形式で送って下さい。以下はRubyとPythonのコード例です。

Ruby:

require 'httpclient'

# 変換対象のHTML
data = <<DATA

RubyからCopper PDFを使う。

DATA

# POSTの準備
client = HTTPClient.new
postdata = {
"rest.user" => "user",
"rest.password" => "kappa",
"rest.main" => data,
}

# 大きなデータを扱えるようにmultipart/formdataで送信(boundaryは適当な文字列)
boundary = "3w48588hfwfdwed2332hdiuj2d3jiuhd32"
puts client.post_content("http://localhost:8097/transcode", postdata,
"content-type" => "multipart/form-data, boundary=#{boundary}")

Python:

import urllib2

# multipart/form-dataの出力(boundaryは適当な文字列)
boundary = '3w48588hfwfdwed2332hdiuj2d3jiuhd32'
def multipart_formdata(form_dict):
disposition = 'Content-Disposition: form-data; name="%s"'
lines = []
for k, v in form_dict.iteritems():
lines.append('--' + boundary)
lines.append(disposition % k)
lines.append('')
lines.append(v)
lines.append("--" + boundary + "--")
lines.append('')
value = "rn".join(lines)
return value

# 変換対象のHTML
data = """

PythonからCopper PDFを使う。

"""

# POSTの実行
params = {'rest.user':'user',
'rest.password':'kappa',
'rest.main':data}

url = 'http://localhost:8097/transcode'
req = urllib2.Request(url)
req.add_header("Content-Type",
"multipart/form-data; boundary=" + boundary)
data = multipart_formdata(params)
f = urllib2.urlopen(req, data)

# 結果表示
print f.read()


PDF

.NET版ドライバにDLL(.NET3.5, 4.0用)を追加しました

Copper PDF の.NET版ドライバに、.NET 3.5, .NET 4.5 向けにビルド済みのDLLを添付しました。こちらのアドレスからダウンロードして下さい。

http://sourceforge.jp/projects/copper/releases/?package_id=12608

従来、.NET版ドライバには対応.NETバージョンを明示していませんでしたが、.NET 3.5以降が対応バージョンとなります。


PDF

表組み組版サンプル

申請書

HTML / PDF

表組みを活用した申請書です。Copper PDFの表組みは普通のブラウザと同じように内容に合わせて列の幅が自動調整されます。colspan, rowspanによるセルの接続もできます。

改行されたくない部分が改行されてしまう場合には、セルに対して white-space: nowrap; を指定することで改行を回避することができます。

固定表組み

HTML / PDF

TABLEに対して table-layout: fixed; を指定すると、それは固定表組みとなります。固定表組みではテーブルセルの内容によって列の幅が変わりません。

COL, COLGROUPによって明示的に列の幅を指定するか、最初の行のTR, THに指定した列の幅が適用されます。何も指定しない場合、全ての列の幅が同じになります。

固定表組みのメリットは、列の幅を完全に固定することができること、Copper PDFによる処理が速くなるということです。長いテーブルは固定表組みにすることをお勧めします。


PDF

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

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

変更点

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

PDFのMediaBoxが、通常と比べて上下逆さまなため、Apache PDFBoxでページの高さを正しく検出できない問題に対応しました

JDK1.5以外で画像(PDFではなくPNG, JPEGなど)として出力時に文字が二重に表示される問題に対応しました

以下の改良をしました

RPM, DEBパッケージでsudoを不要にしました

Red Hat Linux, CentOSでRPMによるアップグレード時にCopper PDFがrootで起動される不具合に対処しました

座標変換のために、以下のCSS3プロパティを実装しました

‘-cssj-transform’
‘-cssj-transform-origin’
※他のブラウザとの互換性のために-webkit- -moz-で始まるプロパティ名が使えます

透明色のために、次のCSS3関数を実装しました

rgba

テキスト装飾のために、次のCSS3プロパティを実装しました

‘-cssj-text-fill-color’
‘-cssj-text-stroke-width’
‘-cssj-text-stroke-color’
‘-cssj-text-stroke’
※Google Chromeとの互換性のために-webkit-で始まるプロパティ名が使えます

‘text-shadow’(一部制約あり)


PDF