|
日本発のプログラミング言語で、ウェブ開発等でも定評のある、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を出力することができます。
ドキュメント
ダウンロード
sourceforge.jpで配布しています
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として出力するようにしました。
以下のバグを修正しました
ドライバ付属の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をダウンロードして下さい。
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宣言
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
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)のボタンを表示するようにしました
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()
Copper PDF の.NET版ドライバに、.NET 3.5, .NET 4.5 向けにビルド済みのDLLを添付しました。こちらのアドレスからダウンロードして下さい。
http://sourceforge.jp/projects/copper/releases/?package_id=12608
従来、.NET版ドライバには対応.NETバージョンを明示していませんでしたが、.NET 3.5以降が対応バージョンとなります。
申請書
HTML / PDF
表組みを活用した申請書です。Copper PDFの表組みは普通のブラウザと同じように内容に合わせて列の幅が自動調整されます。colspan, rowspanによるセルの接続もできます。
改行されたくない部分が改行されてしまう場合には、セルに対して white-space: nowrap; を指定することで改行を回避することができます。
固定表組み
HTML / PDF
TABLEに対して table-layout: fixed; を指定すると、それは固定表組みとなります。固定表組みではテーブルセルの内容によって列の幅が変わりません。
COL, COLGROUPによって明示的に列の幅を指定するか、最初の行のTR, THに指定した列の幅が適用されます。何も指定しない場合、全ての列の幅が同じになります。
固定表組みのメリットは、列の幅を完全に固定することができること、Copper PDFによる処理が速くなるということです。長いテーブルは固定表組みにすることをお勧めします。
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’(一部制約あり)
|