Adobe ColdFusion(2023 リリース)には、新しい PDF エンジン 2.0 が導入されています。
有効にする方法
ColdFusion Administrator/データとサービス/PDF サービスで、新しいエンジンのオプションがデフォルトで選択されています。
PDF 2.0 について
PDF エンジン 2.0 だけで、任意の HTML を完全な標準 PDF に変換することができます。HTML5、CSS3 および JavaScript をサポートしています。通常は、HTML から PDF へのサーバーサイド変換に使用されます。電子配布用の動的なデータドリブン型ドキュメント(レポート、請求書、フォーム、データシートなど)から、印刷および電子出版用の複雑な高画質 PDF(カタログ、マーケティング資料、技術ドキュメント、ジャーナルなど)までを対象としています。
この新しいエンジンは、デフォルトで、Windows、Linux、Mac および Solaris のすべてのプラットフォームで使用できます。
- 多数の PDF ファイルを変換する場合は、jetty.lax ファイルで –Xmx1024m を使用して、メモリ設定を 1024 MB に増やすことをお勧めします。
- web.xml ファイルの変更点 - 最後に言及されている 4 つの設定(下記)は、エンジン 1.0 にのみ適用され、新しいエンジン 2.0 には適用されません。
maxPDFConversionForService, startScanPort, endScanPort, maxMemoryUsage
HTML5
追加の前処理やクリーンアップを行わずに、HTML5 を PDF ドキュメントに変換できます。このエンジンでは、すべての HTML5 要素をサポートしています。
例
<cfhtmltopdf destination="canvas.pdf" overwrite="yes">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Filling Color inside a Rectangle on the Canvas</title>
<style>
canvas {
border: 1px solid #000;
}
</style>
<script>
window.onload = function() {
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.rect(50, 50, 200, 100);
context.fillStyle = "#FB8B89";
context.fill();
context.lineWidth = 5;
context.strokeStyle = "black";
context.stroke();
};
</script>
</head>
<body>
<canvas id="myCanvas" width="300" height="200"></canvas>
</body>
</html>
</cfhtmltopdf>
出力
CSS3
計算、メディアクエリ、ボックスシャドウ、テキストシャドウおよびフィルターを使用できます。要素の変形、回転および拡大/縮小を行って、HTML と CSS の組み合わせを PDF に変換できます。このエンジンでは、領域、欄外要素、グリッドおよびフレキシブルボックスレイアウトをサポートしています。
例
<cfhtmltopdf destination="CSS3_Flexbox.pdf" overwrite="yes">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Example of Controlling Flow inside Flex Container along Main Axis</title>
<style>
.flex-container {
width: 80%;
min-height: 300px;
margin: 0 auto;
font-size: 32px;
display: -webkit-flex;
-webkit-flex-direction: row-reverse;
display: flex;
flex-direction: row-reverse;
border: 1px solid #666;
}
.flex-container div {
padding: 10px;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
.item1 {
background: #e84d51;
}
.item2 {
background: #7ed636;
}
.item3 {
background: #2f97ff;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="item1">Item 1</div>
<div class="item2">Item 2</div>
<div class="item3">Item 3</div>
</div>
</body>
</html>
</cfhtmltopdf>
出力
JavaScript
JavaScript ベースのレイアウトを PDF に移行できます。さらに、HTML5 Canvas、Highcharts およびその他の JavaScript ライブラリも標準でサポートされています。
例
<cfhtmltopdf destination=”js.pdf” overwrite="yes">
<!DOCTYPE html>
<html>
<head>
<link rel = "stylesheet" href = "http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
<script src = "http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script> </head> <body>
<div id = "map" style = "width: 900px; height: 580px"></div>
<script>
// マップオプションを作成
var mapOptions = {
center: [17.385044, 78.486671],
zoom: 10
} // マップオブジェクトを作成
var map = new L.map('map', mapOptions); // レイヤーオブジェクトを作成
var layer = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'); // レイヤーをマップに追加
map.addLayer(layer);
</script>
</body>
</html>
</cfhtmltopdf>
出力
PDF/A への準拠
PDF 2.0 では、PDF/A-1a または PDF/A-3a 準拠のファイルおよびその他の PDF/A サブ形式のファイルの作成をサポートしています。
PDF/A は、ドキュメントの長期的なアーカイブを目的とする一連の ISO 標準規格(「ISO 19005」)です。これらの標準規格の目的は、外観を再現すると共に、ドキュメントの構造を内包できるようにすることです。ドキュメントの表示に必要なすべての情報は、同じ方法で常にファイルに埋め込まれています。外部リソースへの依存は許可されていません。PDF/A-1a および PDF/A-3a では、出力 PDF ドキュメントがタグ付けされる必要もあるので、アクセシビリティの高いドキュメントが提供されます。
PDF 2.0 では、これらの要件にできる限り適合することが保証されます。
サポートされている PDF/A 準拠レベルは、PDF/A-1a、PDF/A-1b、PDF/A-2a、PDF/A-2b、PDF/A-2u、PDF/A-3a、PDF/A-3b および PDF/A-3u です。
準拠は、下記のように、cfhtmltopdf タグに属性として追加することができます。
例
<cfhtmltopdf source="input.html" destination="pdfa3u.pdf" conformance="PDFA3u" overwrite="yes"> </cfhtmltopdf>
ヘッダーとフッターの機能強化
PDF 2.0 では、ヘッダーとフッターで HTML コンテンツがサポートされています。
これまでは静的テキストのみでしたが、任意の HTML 要素を使用して素晴らしい現代的なヘッダーとフッターを作成できるようになりました。
<cfhtmltopdf>
何らかの HTML コンテンツ
<cfhtmltopdfitem type="header">
<html>
<table
width="100%"
style="font-size: 12px; font-family: Tahoma, sans-serif" >
<tr>
<td valign="top" align="left" width="50%">
<img border="0" height="88"
src=https://www.google.co.uk/logos/doodles/2022/seasonal-holidays-2022-
6753651837109831.4-law.gif />
</td>
<td valign="center" align="left" height="50%" width="50%">
<h1>Header</h1>
</td>
</tr>
</table>
<table
width="100%"
style="border-bottom: 1px;
font-size: 10px;
font-family: Tahoma, sans-serif; cellspacing=5" >
<tr>
<td valign="middle" align="center" width="10%">
<strong>Sl No.
</strong>
</td>
<td valign="middle" align="left" width="36%">
<strong>Column1</strong>
</td>
<td valign="middle" align="right" width="10%">
<strong>Column2</strong>
</td>
<td valign="middle" align="right" width="12%">
<strong>Column3</strong>
</td>
</tr>
</table>
</html>
</cfhtmltopdfitem>
<cfhtmltopdfitem type="pagebreak">
</cfhtmltopdfitem>
<cfhtmltopdfitem type="footer">
<p>footer</p>
</cfhtmltopdfitem>
</cfhtmltopdf>
出力