アリンコネット – あるSEのログ2


2010 年 2 月 26 日

C#にてPDFファイルを結合

カテゴリー: 開発(備忘録) – teminami 22:10

複数のPDFファイル一つのファイルにまとめるにはiTextSharpを使う。こちらを参考にさせて頂きました。これによって、結合できるがWebアプリ上でテンポラリファイルを生成とかカッコ悪い。

ということで、MemoryStreamに対応させました。が・・・copy.close時にMemoryStreamが閉じられてしまう。とりあえず、doc.close();とcopy.close();をコメントにしてみると、ファイル上で結合したものと比較して末尾が切れてる。

結局、

copy.CloseStream = false

がポイントでした。

 

        public static void fnJoinPdf(MemoryStream ms1, MemoryStream ms2, MemoryStream msJoin)
        {
            Document doc = null;    // 出力ファイルDocument
            PdfCopy copy = null;    // 出力ファイルPdfCopy
            MemoryStream[] aryMsStream = { ms1, ms2 }; // 入力ファイルを配列化
            try
            {
                //-------------------------------------------------------------------------------------
                // ファイル件数分、ファイル結合
                //-------------------------------------------------------------------------------------
                for (int i = 0; i < aryMsStream.Length; i++)
                {
                    // リーダー取得
                    PdfReader reader = new PdfReader(aryMsStream[i].ToArray());
                    // 入力ファイル1を出力ファイルの雛形にする
                    if (i == 0)
                    {
                        // Document作成
                        doc = new Document(reader.GetPageSizeWithRotation(1));
                        // 出力ファイルPdfCopy作成
                        copy = new PdfCopy(doc, msJoin);
                        copy.CloseStream = false;
                        // 出力ファイルDocumentを開く
                        doc.Open();
                        // 文章プロパティ設定
                        doc.AddKeywords((string)reader.Info["Keywords"]);
                        doc.AddAuthor((string)reader.Info["Author"]);
                        doc.AddTitle((string)reader.Info["Title"]);
                        doc.AddCreator((string)reader.Info["Creator"]);
                        doc.AddSubject((string)reader.Info["Subject"]);
                    }
                    // PDFコンテンツを取得、copyオブジェクトに追加
                    for (int iPageCnt = 1; iPageCnt <= reader.NumberOfPages; iPageCnt++)
                    {
                        PdfImportedPage page = copy.GetImportedPage(reader, iPageCnt);
                        copy.AddPage(page);
                    }
                    // フォーム入力を結合
                    PRAcroForm form = reader.AcroForm;
                    if (form != null)
                        copy.CopyAcroForm(reader);
                    // リーダーを閉じる
                    reader.Close();
                }
            }
            finally
            {
                if (copy != null)
                    copy.Close();
                if (doc != null)
                    doc.Close();
            }
        }

2010 年 2 月 6 日

社内SEがするべきこと

カテゴリー: うだうだ – teminami 22:32

  1. 最新技術や凝った作りこみをしない
    • 同じ事ができるレベルまで部下を育てるのはコスト?
    • それをメンテする人間も大変だ。
  2. 外部へ頼めない事をする
    • 予算があったらその仕事は社外に出せるのでは?
    • どんなシステムにして欲しいと思っているかを汲み取るべき。
    • 運用開始してから、要望を聞いているか?
  3. 社内の調整はシステムの設計よりも重要。
    • 利用する部署の和を持ってよしとする
    • 利用できないシステムは作る必要も無い。
    • 多くの部署で利用されるシステムほど調整も大変だが、メリットも大きい。
  4. 技術的な観点から、断らない事
    • ユーザーの要望はあくまで理想。
    • どこまで理想に近づけるかがポイント。
偉そうな事を書いてますが、残念ながら最近の反省です・・・。

2010 年 2 月 5 日

BlogEngine.Net 1.5をSQL Serverで使う

カテゴリー: サイト構築 – Tags: , , – teminami 21:03

メリット

  • SQL Serverが稼働していれば、データ抽出が楽。
  • ActiveDirectoryで認証できるハズ。
  • WindowsLiveWriterで編集できる。

参考サイト

 

WS000048

  1. まずDBをBlogEngineという名前で用意する
  2. \BlogEngine.Web\setup\SQLServer内にあるMSSQLSetup1.5.0.0.sqlを実行し必要なテーブルを作成
  3. BlogEngine(例)というユーザーを作成し、必要が権限を与える。
  4. \BlogEngine.Web\setup\SQLServer内にあるSQLServerWeb.Configを参考にWeb.configを修正する。

ActiveDirectoryでのユーザー認証はBlogEngineでActiveDirectory認証を参考にしたがうまく行かず。SQL Serverを利用するようにした設定とうまくかみ合ってないのかも。