.NET TIPS

[ASP.NET]PDF文書のセキュリティ情報やヘッダ/フッタを設定するには?

山田 祥寛
2005/06/17

 「TIPS:[ASP.NET]Webフォームから動的にPDF文書を作成するには?」でも紹介したように、オープンソース・ライブラリであるiText.NETを利用することで、ASP.NETアプリケーションからPDF文書を動的に生成できる。

 前掲のTIPSでは、ごく基本的なPDF文書の生成方法についてのみ紹介したが、iText.NETを利用すれば、PDFの特徴的な機能であるセキュリティ設定やメタ情報の定義、透かし(Watermark)、ヘッダ/フッタの設定なども自由に行うことができる。本稿では、前掲のTIPSで紹介したサンプル・プログラムpdf_cs.aspx/pdf_vb.aspxをベースに、これらの機能を追加してみたい。

 それでは、さっそく具体的なサンプル・コードを見ていくことにしよう。以下のコードでは、PDF文書に対してセキュリティ情報やヘッダ/フッタなどを追加する。なお、本稿のサンプルを実行するには、前掲のTIPSの手順に従って、iText.NETの展開とweb.configの設定を行っておく必要がある。

<%@ Page Language="C#" %>
<%@ Import Namespace="com.lowagie.text" %>
<%@ Import Namespace="com.lowagie.text.pdf" %>
<html>
<head>
<script runat="server">
void PdfCreate_Click(Object sender, EventArgs e){
  Response.ContentType = "application/pdf";
  Response.AddHeader("content-disposition","attachment; filename=result.pdf");
  Document doc = new Document();
  PdfWriter pw = PdfWriter.getInstance(doc, Response.OutputStream);

  // (1)セキュリティ設定
pw.setEncryption(PdfWriter.STRENGTH128BITS, "dotnet", "dotnet", PdfWriter.AllowPrinting | PdfWriter.AllowCopy);

  // (2)メタ情報の定義
  doc.addTitle("iText.NETのサンプル");
  doc.addSubject("iText.NETのサンプルです");
  doc.addAuthor("山田祥寛");
  doc.addCreator("pdf_meta_cs.aspx");
  doc.addKeywords("ASP.NET, iText.NET");

  // (3)ヘッダ/フッタの追加
  HeaderFooter header = new HeaderFooter(new Phrase("Sample Header"),false);
  HeaderFooter footer = new HeaderFooter(new Phrase("Sample Footer"),false);
  doc.setHeader(header);
  doc.setFooter(footer);

  // (4)透かしの設定
  com.lowagie.text.Image img = com.lowagie.text.Image.getInstance(Server.MapPath("wings.jpg"));
  Watermark mark = new Watermark(img,PageSize.A4.width() - img.plainWidth(), 0);
  doc.add(mark);
  doc.open();
  Font font = new Font(BaseFont.createFont("HeiseiMin-W3", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED), 12, Font.NORMAL);
  doc.add(new Paragraph("こんにちは、" + name.Text + "さん", font));
  doc.close();
  Response.End();
}
</script>
</head>
<body>
<h1>PDF文書の生成</h1>
<form runat="Server">
名前:
<asp:TextBox id="name" runat="Server" />
<asp:Button id="PdfCreate" runat="Server"
  Text="生成" OnClick="PdfCreate_Click" />
</form>
</body>
</html>
PDF文書に対してセキュリティ情報やヘッダ/フッタなどを追加するWebフォーム(C#版:pdf_meta_cs.aspx)
 
<%@ Page Language="VB" %>
<%@ Import Namespace="com.lowagie.text" %>
<%@ Import Namespace="com.lowagie.text.pdf" %>
<html>
<head>
<script runat="server">
Sub PdfCreate_Click(sender As Object, e As EventArgs)
  Response.ContentType="application/pdf"
  Response.AddHeader("content-disposition","attachment; filename=result.pdf")
  Dim doc As New Document()
  Dim pw As PdfWriter = PdfWriter.getInstance(doc, Response.OutputStream)

  ' (1)セキュリティ設定
pw.setEncryption(PdfWriter.STRENGTH128BITS, "dotnet", "dotnet", PdfWriter.AllowPrinting Or PdfWriter.AllowCopy)

  ' (2)メタ情報の定義
  doc.addTitle("iText.NETのサンプル")
  doc.addSubject("iText.NETのサンプルです")
  doc.addAuthor("山田祥寛")
  doc.addCreator("pdf_meta_vb.aspx")
  doc.addKeywords("ASP.NET, iText.NET")

  ' (3)ヘッダ/フッタの追加
  Dim header As New HeaderFooter(New Phrase("Sample Header"), False)
  Dim footer As New HeaderFooter(New Phrase("Sample Footer"), False)
  doc.setHeader(header)
  doc.setFooter(footer)

  ' (4)透かしの設定
  Dim img As com.lowagie.text.Image = com.lowagie.text.Image.getInstance(Server.MapPath("wings.jpg"))
  Dim mark As New Watermark(img,PageSize.A4.width() - img.plainWidth(),0)
  doc.add(mark)
  doc.open()
  Dim font As New Font(BaseFont.createFont("HeiseiMin-W3", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED), 12, Font.NORMAL)
  doc.add(New Paragraph("こんにちは、" & name.Text & "さん", font))
  doc.close()
  Response.End()
End Sub
</script>
</head>
<body>
<h1>PDF文書の生成</h1>
<form runat="Server">
名前:
<asp:TextBox id="name" runat="Server" />
<asp:Button id="PdfCreate" runat="Server"
  Text="生成" OnClick="PdfCreate_Click" />
</form>
</body>
</html>
PDF文書に対してセキュリティ情報やヘッダ/フッタなどを追加するWebフォーム(VB.NET版:pdf_meta_vb.aspx)

 それでは、上記のサンプル・プログラムでポイントとなる部分について解説していこう。なお、ソース・コード中のコメントに含まれる番号と以下の番号とは対応関係にあるので、適宜、コードを参照しつつご覧いただきたい。

(1)セキュリティ設定

 ビジネス・ドキュメントのフォーマットとして、PDFフォーマットが重宝される理由の1つとして、文書に対するセキュリティ機能が標準で実装されている点が挙げられる。iText.NETでPDFのセキュリティ機能を設定するには、PdfWriterオブジェクトのsetEncryptionメソッドを利用すればよい。

 setEncryptionメソッドの構文は以下のとおりだ。

setEncryption(
        暗号化の強度,
        ユーザー・パスワード,
        所有者パスワード,
        文書のセキュリティ)
setEncryptionメソッドの構文

 暗号化の強度としては、「PdfWriter.STRENGTH40BITS」(40bit暗号)か「PdfWriter.STRENGTH128BITS」(128bit暗号)を選択できるが、128bit暗号を選択した場合、Adobe Reader 5.0より前のバージョンでは読み込むことができないので、注意していただきたい。

 第2パラメータと第3パラメータを指定することで、文書をパスワードで保護できる。もしもパスワードが不要である場合には、これらのパラメータにはnull値を指定すること。

 次の画面は、文章をパスワード保護した場合に表示される[パスワード]ダイアログの例である。

[パスワード]ダイアログ
パスワードを設定すると、文書アクセス時にパスワード・ダイアログが表示される。

 このようにして設定した文書のセキュリティは、Adobe Readerの[文書のプロパティ]−[セキュリティ]タブから確認することができる。

[文書のセキュリティ]ダイアログ
このダイアログから、PDF文書に対して設定されたセキュリティ情報を確認できる。

 本稿のセキュリティ設定では、印刷と文書のコピーを許可しているが、これらを禁止することもできる。これらの許可設定を変更するには、以下のような定数を指定すればよい。

定数 概要
AllowPrinting 印刷
AllowCopy 内容のコピーと抽出
AllowModifyContents 文書の変更
AllowModifyAnnotations 注釈の入力
AllowFillIn フォーム・フィールドの入力と署名
AllowScreenReaders アクセシビリティのための内容抽出
AllowAssembly 文書アセンブリ
PDF文書に対して設定可能な主なセキュリティ定数

(2)メタ情報の定義

 PDF文書にメタ情報を追加するのは、Documentオブジェクト(com.lowagie.text名前空間)のaddXxxxxメソッド(addTitleメソッドやaddSubjectメソッドなど)の役割だ(「Xxxxx」の部分はメタ情報の種類によって変化する)。PDF文書に対して設定されたメタ情報は、セキュリティ情報と同様、[文書のプロパティ]から[概要]タブを選択することで確認できる。

 次の画面は実際にメタ情報を確認しているところだ。

[文書のプロパティ]ダイアログの[概要]タブを開いたところ
ここでPDF文書に設定したメタ情報を確認できる。

(3)ヘッダ/フッタの追加

 PDF文書のヘッダ/フッタを管理するのは、HeaderFooterクラス(com.lowagie.text名前空間)の役割だ。そのクラスのコンストラクタの第1パラメータに追加したい文字列を、第2パラメータにページ番号を挿入するかどうかを指定する。生成されたHeaderFooterオブジェクトは、setHeaderメソッドやsetFooterメソッドで実際のPDF文書内に追加できる。

 次の画面はヘッダを追加したPDF文書の例である。

PDF文書に追加されたヘッダ

(4)透かしの設定

 ビジネス文書を作成していると、各ページに企業ロゴや「マル秘」「案」「見本」のような透かし(Watermark)を入れたいケースがある。iText.NETで透かしを管理するのは、Watermarkクラス(com.lowagie.text名前空間)の役割だ。

 Watermarkクラスのコンストラクタには、第1パラメータから順に、挿入するImageオブジェクト(com.lowagie.text名前空間)、挿入位置(横)、挿入位置(縦)を指定すること。ここではPDF文書の右端にロゴイメージを追加する。なお、このImageクラスは、System.Web.UI.WebControls名前空間などのImageクラスとクラス名が重複するため、完全修飾名で記述する必要がある。

PDF文書に追加された透かし
PDF文書の右端に「Wings」というロゴが透かしとして追加されている。

 なお、本稿で紹介した情報を設定する場合には、必ずDocumentオブジェクトのopenメソッドを呼び出す前に行う必要があるので、注意していただきたい。End of Article

カテゴリ:Webフォーム 処理対象:PDF
使用ライブラリ:PdfWriterクラス(com.lowagie.text.pdf名前空間)
使用ライブラリ:Documentクラス(com.lowagie.text名前空間)
使用ライブラリ:HeaderFooterクラス(com.lowagie.text名前空間)
使用ライブラリ:Watermarkクラス(com.lowagie.text名前空間)
使用ライブラリ:Imageクラス(com.lowagie.text名前空間)
関連TIPS:[ASP.NET]Webフォームから動的にPDF文書を作成するには?
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]iText.NETでPDF文書に表を追加するには?
[ASP.NET]あらかじめ用意したPDF文書をインポートするには?
[ASP.NET]Webフォームから動的にPDF文書を作成するには?
[ASP.NET]フォーム認証のユーザー管理をXMLファイルで行うには?
[ASP.NET]ページのタイトルやメタ情報を動的に変更するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間