2013年6月18日火曜日

PDFファイルにパスワードを設定したり、暗号化したりしてみる。

既に存在しているpdfファイルにパスワードをかけたい。暗号化をしたい。
そんなことを自作のプログラムからやりたいよ。と考えた。

軽くググって、iTextの存在を知る。JavaやC#で作られたライブラリのようです。
早速、ダウンロード。

ダウンロードしたファイルの中には、たくさんのZIPファイルがありました。
とりあえず、dll-coreのみ解凍します。

今回は、Visual Studio 2008 から使ってみました。
書いたコードは、こちらになります(いろいろ端折ってますけどね)。

 //  まずはpdfを読み込み
  iTextSharp.text.pdf.PdfReader pr =
    new iTextSharp.text.pdf.PdfReader(@"c:\work\doc.pdf");
  //  pdf のドキュメントを生成
  iTextSharp.text.Document doc =
    new iTextSharp.text.Document(pr.GetPageSize(1));
  // pdfのライターを作成・オープンし、セキュリティの設定をします。
  iTextSharp.text.pdf.PdfWriter pw =
    iTextSharp.text.pdf.PdfWriter.GetInstance(
      doc, new System.IO.FileStream(
        @"c:\\work\doc.enc.pdf",
        FileMode.OpenOrCreate));
    pw.Open();
    pw.SetEncryption(iTextSharp.text.pdf.PdfWriter.STRENGTH128BITS,
      "readpass",
      "writepass",
      iTextSharp.text.pdf.PdfWriter.ALLOW_COPY |
      iTextSharp.text.pdf.PdfWriter.ALLOW_PRINTING);
    doc.Open();
    iTextSharp.text.pdf.PdfContentByte pcb = pw.DirectContent;
    for (int i = 1; i < pr.NumberOfPages; i++)
    {
      doc.NewPage();
      iTextSharp.text.pdf.PdfImportedPage pip = pw.GetImportedPage(pr, i);
      pcb.AddTemplate(pip, 0, 0);
    }
     (後片付けも必要ですよ)
意外とお手軽に出来ました。iText使えば、それなりにpdfファイルをいじって楽しめそうです。
ちなみにiTextフリー版のライセンスは、AGPLv3です。

本内容は、以下のページを参考にさせていただきました。
http://niyodiary.cocolog-nifty.com/blog/2009/01/aspnetpdf-f0f5.html