SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(LEADTOOLS)

画像をパスワード付きPDFドキュメントに変換する.NETアプリケーションの作成

LEADTOOLS 16.5J Document ImagingのRasterImageViewerコンポーネントを使ったアプリケーションの作成

  • このエントリーをはてなブックマークに追加

JPEG画像をパスワード機能付きPDFに変換する処理

 画像をRasterImageViewerコントロールで表示したら、この画像をPDFに変換します。PDFへの変換と保存の処理はRasterCodecsクラスのSaveメソッドで行います。

 その前に、次の3つの操作制限と2つのパスワードを設定しておきます。これらは、PDFに対するコピー/印刷/編集操作を禁止し、パスワードを入力しないと文書の閲覧とこれらの属性の変更ができないようにします。

 この処理はCodecsPdfSaveOptionsクラスの次のメンバプロパティを使用します。

  • ExtractTextGraphics

     グラフィックスのコピーの許可/禁止を設定。Falseでユーザーはコピーができなくなる

  • PrintDocument

     印刷の許可/禁止を設定。Falseでユーザーは印刷ができなくなる

  • ModifyDocument

     文書編集の許可/禁止を設定。Falseでユーザーは文書の編集ができなくなる

  • UserPassword

     PDF文書閲覧に際して使用するパスワード。暗号化ファイルの保存時に設定

  • OwnerPassword

     PDF文書のアクセス設定や保護設定をする際に設定するパスワード。パスワードを入力しないとこれらの機能にアクセスできない。

 Saveメソッドにはオーバーロードメソッドがいくつか用意されています。今回の処理には、次の書式のメソッドを使用します。

Save(RasterImage,String,RasterImageFormat,Int32)
  • RasterImage

     画像データを含むRasterImageオブジェクト

  • fileName

     出力ファイル名を表すString

  • RasterImageFormat

     出力ファイル形式。PDF形式に変換する場合は、RasterImageFormatクラスの次のメンバ(定数)を使用する

    PDF変換時のRasterImageFormatクラスの定数
    定数 説明 ビット数
    RasPdf ラスタPDF、圧縮なし 1、2、4、8、24ビット
    RasPdfCmyk ラスタPDF、CMYKサポート 24ビット
    RasPdfG31Dim ラスタPDF、G3 1次元圧縮 1ビット
    RasPdfG32Dim ラスタPDF、G3 2次元圧縮 1ビット
    RasPdfG4 ラスタPDF、G4圧縮 1ビット
    RasPdfLzw ラスタPDF、LZW圧縮 1、2、4、8、24ビット
    RasPdfLzwCmyk ラスタPDF、CMYKサポート、LZW圧縮 24ビット
    RasPdfJpeg ラスタPDF、JPEG 4:4:4圧縮 8ビット(グレースケール)、24ビット
    RasPdfJpeg422 ラスタPDF、JPEG 4:2:2圧縮 24ビット
    RasPdfJpeg411 ラスタPDF、JPEG 4:1:1圧縮 24ビット
    RasPdfJbig2 ラスタPDF、JBIG2圧縮 1ビット
  • bitsPerPixel

     出力ファイルのビット数

 今回は、JPEG画像をPDFに変換するため、RasterImageFormatクラスの「RasPdfJpeg」を使用します。また、フルカラー画像を扱うので出力ビット数は「24」に設定します。

Visual Basic
codecs.Save(RasterImageViewer1.Image, "C:\pdf\" + TextBox2.Text, RasterImageFormat.RasPdfJpeg, 24)
C#
codecs.Save(rasterImageViewer1.Image, @"c:\pdf\" + textBox2.Text, RasterImageFormat.RasPdfJpeg, 24);

 以上でできあがりです。

Visual Basic
Private Sub create_pdf_btn_Click(sender As System.Object, e As System.EventArgs) Handles create_pdf_btn.Click
    If RasterImageViewer1.Image IsNot Nothing Then
        ' グラフィックスのコピーを禁止する
        codecs.Options.Pdf.Save.ExtractTextGraphics = False

        ' 印刷を禁止する
        codecs.Options.Pdf.Save.PrintDocument = False

        ' 文書の編集を禁止する
        codecs.Options.Pdf.Save.ModifyDocument = False

        ' 暗号化ファイルの保存時に使用するオーナーパスワードを設定
        'オーナーパスワードを入力しないとユーザーがアクセス設定や保護設定を変更できない
        codecs.Options.Pdf.Save.OwnerPassword = "lead2012"

        ' 暗号化ファイルの保存時に使用するユーザーパスワードを設定
        'ユーザーパスワードは文書閲覧に際して使用するパスワード
        codecs.Options.Pdf.Save.UserPassword = TextBox1.Text

        ' 画像をPDFで保存します。
        codecs.Save(RasterImageViewer1.Image, "C:\pdf\" + TextBox2.Text, RasterImageFormat.RasPdfJpeg, 24)
        MessageBox.Show("PDFファイルを保存しました。")
    Else
        MessageBox.Show("PDF化する画像がありません", "PDF作成エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End If
End Sub

Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    RasterCodecs.Shutdown()
End Sub

C#
private void create_pdf_btn_Click(object sender, EventArgs e)
{
    if(rasterImageViewer1.Image != null) 
    {
        // グラフィックスのコピーを禁止する
        codecs.Options.Pdf.Save.ExtractTextGraphics = false;
             
        // 印刷を禁止する
        codecs.Options.Pdf.Save.PrintDocument = false;
             
        // 文書の編集を禁止する
        codecs.Options.Pdf.Save.ModifyDocument = false;
             
        // 暗号化ファイルの保存時に使用するオーナーパスワードを設定
        //オーナーパスワードを入力しないとユーザーがアクセス設定や保護設定を変更できない
        codecs.Options.Pdf.Save.OwnerPassword = "lead2012";
             
        // 暗号化ファイルの保存時に使用するユーザーパスワードを設定
        //ユーザーパスワードは文書閲覧に際して使用するパスワード
        codecs.Options.Pdf.Save.UserPassword = textBox1.Text;
             
        // 画像をPDFで保存します。
        codecs.Save(rasterImageViewer1.Image, @"c:\pdf\" + textBox2.Text, 
                    RasterImageFormat.RasPdfJpeg, 24);
             
        MessageBox.Show("PDFファイルを保存しました。");
    }else
    {
        MessageBox.Show("PDF化する画像がありません", "PDF作成エラー",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    RasterCodecs.Shutdown();
}

動作確認

 では、プログラムを実行し、PDF化した画像を開いてみます(※PDF閲覧には、Adobe社のAcrobat Readerが必要)。

 最初に、閲覧用のパスワードの入力が求められるため、パスワードを入力します。メニューを見ると、印刷やコピー、編集メニューがグレー表示で使用できなくなっています。また、文書のプロパティを開くと、機能制限がかかっていることもわかります。

PDFを開く際にパスワードの入力を求められる
PDFを開く際にパスワードの入力を求められる
印刷や編集メニューが使えない
印刷や編集メニューが使えない
文書のプロパティにも制限内容が表示されている
文書のプロパティにも制限内容が表示されている

まとめ

 画像といえども重要なデータに変わりはないので、きちんとセキュリティをかけることも大切です。LEADTOOLS 16.5J Document Imagingは、このように画像をセキュリティ制限付きPDF文書に変換してくれます。今の時代、情報の保護が厳しく問われていますので、データにセキュリティ設定のできるアプリケーションはより求められていると言えるでしょう。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(LEADTOOLS)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6412 2012/02/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング