PDF帳票に透かしを設定する
製品開発担当の大です。こんにちは。
シーオーリポーツ for Java Ver.4では、PDFおよびTIFFに透かしを設定することが可能になりました。今回はこの機能を使用してPDF帳票に透かしを設定する方法をご紹介したいと思います。
透かしを設定する
PDF帳票の出力を開始する前にCrPdfDocumentオブジェクトにCrWatermarkオブジェクトを追加することで、透かしが設定されます。透かしの外観はシーオーリポーツの描画オブジェクトで作成するか、フォーム上にあらかじめ用意しておいたオブジェクトを指定します。以下の例では、テキストオブジェクトを新規に作成して設定しています。
var draw = new CrDraw();
try (var form = CrForm.open(draw, "HokenSample.cfx")) {
var job = new CrFileOutJob(CorDocumentType.PDF, "透かしを設定.pdf");
var doc = (CrPdfDocument) job.getDocument();
doc.setFontSettings("MS 明朝", FontSettings.forEmbed("msmincho.ttc", CorPdfFontEmbedMode.SUBSET));
doc.setFontSettings("MS ゴシック", FontSettings.forEmbed("msgothic.ttc", CorPdfFontEmbedMode.SUBSET));
// ページ中央に透かしを挿入します
var width = form.getPaperWidth();
var height = 3000;
var startX = 0;
var startY = form.getPaperLength() / 2 - height / 2;
var text = new CrText(startX, startY, width, height, "これはサンプルです");
text.setFont(new CrText.Font("MS ゴシック", 640, CorUnit.POINT10));
text.setAlignment(CorAlignment.CENTER);
text.setVerticalAlignment(CorVerticalAlignment.CENTER);
text.setFrame(false);
text.setTextColor(Color.red);
var watermark = new CrWatermark(text);
doc.addWatermark(watermark);
try {
job.start(draw);
job.getCrPrinter().setFormSize(form);
...
form.printOut();
job.end();
} catch (CrException cex) {
job.abort();
throw cex;
}
} finally {
draw.deleteInstance();
}
不透明度を設定する
透かしはページの一番上のレイヤに描画されますので、普通に描画すると重なった下の部分が隠れてしまいます。不透明度を設定することで、重なった部分も見えるようになります。ここでは不透明度を30%に設定しています。
// 不透明度を設定します(%で指定、0で完全に透明)
watermark.setOpacity(30);
回転を設定する
回転を設定して、文字を斜めに表示することもできます。ここでは回転角度を -55度で設定しています。
// 回転を設定します(1/100度で指定)
watermark.setRotation(-5500);
イメージを設定する
冒頭で触れたように、透かしの外観はシーオーリポーツの描画オブジェクトで作成できますので、テキストのかわりにイメージを使うことも可能です。
// ページ中央に透かしを挿入します
var width = 6560;
var height = 4010;
var startX = form.getPaperWidth() / 2 - width / 2;
var startY = form.getPaperLength() / 2 - height / 2;
var image = new CrImage("HOS.png", startX, startY, width, height);
image.setFrame(false);
var watermark = new CrWatermark(image);
// 不透明度を設定します(%で指定、0で完全に透明)
watermark.setOpacity(60);
doc.addWatermark(watermark);
透かしを敷きつめる
透かしは何個でも設定できますので、このようにたくさん並べて敷きつめることも可能です。(やりすぎると重くなりますが)
// 透かしをページ内に敷きつめます
var width = 3280;
var height = 2005;
var margin = 2000;
for (var startX = -width / 2; startX < form.getPaperWidth(); startX += width + margin) {
for (var startY = -height / 2; startY < form.getPaperLength(); startY += height + margin) {
var image = new CrImage("HOS.png", startX, startY, width, height);
image.setFrame(false);
var watermark = new CrWatermark(image);
// 不透明度を設定します(%で指定、0で完全に透明)
watermark.setOpacity(20);
// 回転します(1/100度で指定)
watermark.setRotation(3000);
doc.addWatermark(watermark);
}
}
透かしを入れるページを指定する
デフォルトでは、透かしは帳票のすべてのページに挿入されます。しかし、「最初のページだけ入れたい」「特定のページでは表示する透かしを変えたい」などのご要望があるかもしれません。ページフィルタを使用すると、透かしをどのページに設定するかを指定することができます。以下の例では、奇数ページのみ透かしを設定するようにしています。
// ページフィルタで透かしを設定するページを指定します
watermark.setPageFilter(pageNo -> pageNo % 2 != 0);
最後に
いかがでしたか?
今回の動作は体験版でも確認することができます。是非こちらからダウンロードして試してみてください!