ラベル Microsoft の投稿を表示しています。 すべての投稿を表示
ラベル Microsoft の投稿を表示しています。 すべての投稿を表示

2020年9月10日木曜日

MS Chart Control を使ったWebformアプリの移行でトラブル

MS Chart Control を使ったWebformアプリを新サーバに移行したところ以下のエラーが出てハマりました。
ファイルまたはアセンブリ 'System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

.NET Framework のバージョンの違いが原因のようでアプリケーションプールを「Classic .NET AppPool」にしたら解決しました。



2018年8月31日金曜日

Microsoft Action Pack のダウンロードページが迷子

私がいつも忘れてしまうだけですが、↓あたりが参考になるかと。
パートナー メンバーシップ センターでの個人アカウントのホーム


https://support.microsoft.com/ja-jp/help/3011409



サイト構成がわかりにくかったり、リンク切れがあったり、もう少しなんとかして欲しいと思うのは私だけでしょうか…。



2018年8月14日火曜日

Remote Desktop Connection Manager ウィンドウサイズに合わせる


上図のように「Same as client area」を選択します。
(以下、再現性ないので確証はありませんが、
RDCManのウィンドウサイズを最大化にしていると
このメニューが表示されませんでした。
ウィンドウの最大化をやめると表示されるかもしれません。)

※2018/8/21追記
上部メニューバーの「Tools」→「Option」から「Client Area」のタブを表示させると「Same as client area」が表示されません。
左ツリーの登録したサーバを右クリックで「Properties」を選択、その中の「Remote Desktop Settings」タブを開くと当該項目が選択できます。

2018年7月23日月曜日

PDFSharp MigraDoc を使ってC#でPDF生成

(正確を期するよう努力いたしておりますが、保証するものではありません。予めご了承願います。)

帳票のような物をPDF出力する必要があり、iTextSharpを久しぶりに利用しようとしたところライセンスがさらに厳しくなっており、代わりとしてPDFSharp(MITライセンス)を利用することにしました。


こちらのページから概要や特徴、ソースのダウンロードページやwiki、forumへアクセスすることができます。

概要

1.PDFSharp と MigraDoc

PDFSharp
- PDFファイルを操作するための.NETライブラリ。テキストはもちろん線や画像の描画もできる。テーブル組や自動改ページなどはない。
MigraDoc
- PDFSharpを使用してよりドキュメント作成に便利な高機能を提供するライブラリ。テーブル組や自動改ページに対応。
Mix
- MigraDocはPDFSharpで構築されているので、両者を混合して利用する事もできる。
MigraDoc Sample: Mix MigraDoc and PDFsharp - PDFsharp and MigraDoc Wiki

2.Github


ソースコードはこちらから入手できます。
samples が便利なので詰まった時は参考にされると解決するかもしれません。

準備

PDFSharp,MigraDocどちらもVisual Studio の Nuget Package でインストールできます。
上図の通り、いくつか種類があってどれをインストールすれば良いか悩みます。
それぞれの使い分けは以下の通りです。
PDF Core Build 未完成。完成すればプラットフォームに依存せずMacやLinuxでも動作する予定。
GDI+ Build .NET 2.0、C# 2 で作成。WinForms、 Web アプリケーションで動作。( WPF でも動作する)
WPF Build .NET 3.5、C# 2 で作成。その名の通り WPF アプリケーションで動作。
Hybrid Build GDI+ WPF をひとつのプロジェクトで共存。ただし、動作が重くなるなど問題があり実際のアプリケーションで利用するのは非推奨。
Supported Platforms and Technologies, Available Builds - PDFsharp and MigraDoc Wiki

サンプル

ASP.NET MVC で日本語フォントを含むPDFを出力するサンプルを作成します。
MigraDoc GDI+ を Nuget でインストールします。

日本語フォントを利用するためにはIFontResolverを継承したクラスを作成し、それをプログラムに登録する必要があります。
以下のサイトを参考にさせていただきました。

生成結果のPDFは以下の通りです。サンプルデータを作成するのにWikipediaの内容を一部利用しております。(https://ja.wikipedia.org/wiki/FIFAワールドカップ)
色付きの部分は追記した補足説明(英文字はコード内で自分が命名した変数など)で、プログラムで生成したものではありません。
(ヘッダやパラグラフにわかりやすくなるように枠線をつけています。)

Documentクラスに表紙や目次、第何章などのSection(章)を追加し、その章の中にParagraph(段落)やTable(表組み)などを追加していって文書を作成していきます。
このサンプルを作成するのに記述したコードは以下の通りです。

using MigraDoc.DocumentObjectModel;
using MigraDoc.DocumentObjectModel.Tables;
using MigraDoc.Rendering;
using System.IO;
using System.Web.Mvc;

namespace MigraDocSample.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            // フォントリゾルバーのグローバル登録
            PdfSharp.Fonts.GlobalFontSettings.FontResolver = new JapaneseFontResolver();

            //ドキュメント作成
            Document document = new Document();
            document.Info.Title = "Hello, MigraDoc";
            document.Info.Subject = "This is MigraDoc Sample.";
            document.Info.Author = "Author";
            document.DefaultPageSetup.LeftMargin = Unit.FromCentimeter(2);
            document.DefaultPageSetup.RightMargin = Unit.FromCentimeter(2);
            document.DefaultPageSetup.TopMargin = Unit.FromCentimeter(10);
            document.DefaultPageSetup.BottomMargin = Unit.FromCentimeter(5.5);
            
            //表紙セクション作成
            Section sectionCover = document.AddSection(); //Sectionを追加

            Font fontCoverTitle = new Font("yumin",30); //登録したフォント
            fontCoverTitle.Underline = Underline.Single;
            Paragraph paragraphCover = sectionCover.AddParagraph(); //Paragraphを追加
            paragraphCover.AddFormattedText("表紙タイトル",fontCoverTitle);
            paragraphCover.Format.SpaceBefore = "3cm";
            paragraphCover.Format.SpaceAfter = "3cm";
            paragraphCover.Format.Alignment = ParagraphAlignment.Center;

            Font fontDate = new Font("yumin", 8);
            Paragraph paragraphDate = sectionCover.AddParagraph();
            paragraphDate = sectionCover.AddParagraph();
            paragraphDate.AddFormattedText("Rendering date: ", fontDate);
            paragraphDate.AddDateField();
            paragraphDate.Format.Alignment = ParagraphAlignment.Right;

            //メインセクション作成
            Section sectionMain = document.AddSection();
            sectionMain.PageSetup.HeaderDistance = Unit.FromCentimeter(2);
            sectionMain.PageSetup.FooterDistance = Unit.FromCentimeter(1.5);
            sectionMain.PageSetup.StartingNumber = 1;

            //ヘッダテーブル作成
            Table tableHeader = new Table();
            tableHeader.Borders.Visible = true;
            tableHeader.TopPadding = 0;
            tableHeader.BottomPadding = 5;

            //3列作成
            var columnHeader = tableHeader.AddColumn(Unit.FromCentimeter(6));
            columnHeader.Format.Alignment = ParagraphAlignment.Left;
            columnHeader = tableHeader.AddColumn(Unit.FromCentimeter(3));
            columnHeader.Format.Alignment = ParagraphAlignment.Right;
            columnHeader = tableHeader.AddColumn(Unit.FromCentimeter(8));
            columnHeader.Format.Alignment = ParagraphAlignment.Left;

            var fontHeaderTitle = new Font("yumin", 18);
            fontHeaderTitle.Underline = Underline.Single;
            var fontHeader = new Font("yumin", 10);
            var para = new Paragraph();

            //1行目
            para.AddFormattedText("FIFAワールドカップ", fontHeaderTitle);
            var row = tableHeader.AddRow();
            row.Height = 30;
            row.Cells[0].Add(para);
            row.Cells[0].MergeRight = 2;
            row.Cells[0].Format.Alignment = ParagraphAlignment.Center;
            //2行目
            row = tableHeader.AddRow();
            para = row.Cells[1].AddParagraph();
            para.AddFormattedText("開始年", fontHeader);
            para = row.Cells[2].AddParagraph();
            para.AddFormattedText("1930年", fontHeader);
            //3行目
            row = tableHeader.AddRow();
            para = row.Cells[1].AddParagraph();
            para.AddFormattedText("主催", fontHeader);
            para = row.Cells[2].AddParagraph();
            para.AddFormattedText("FIFA", fontHeader);
            //4行目
            row = tableHeader.AddRow();
            para = row.Cells[1].AddParagraph();
            para.AddFormattedText("地域", fontHeader);
            para = row.Cells[2].AddParagraph();
            para.AddFormattedText("世界", fontHeader);
            //5行目
            row = tableHeader.AddRow();
            para = row.Cells[1].AddParagraph();
            para.AddFormattedText("参加チーム数", fontHeader);
            para = row.Cells[2].AddParagraph();
            para.AddFormattedText("32(本大会)", fontHeader);
            //6行目
            row = tableHeader.AddRow();
            para = row.Cells[1].AddParagraph();
            para.AddFormattedText("出典", fontHeader);
            para = row.Cells[2].AddParagraph();
            para.AddFormattedText("https://ja.wikipedia.org/wiki/FIFAワールドカップ", fontHeader);

            sectionMain.Headers.Primary.Add(tableHeader); //sectionにヘッダーを追加

            //本文作成
            var fontMainTitle = new Font("yumin", 14);
            fontMainTitle.Underline = Underline.Dash;
            var fontMain = new Font("yumin", 10);
            //1段落目(英文は英文のルールに従って改行される)
            var paraMain = document.LastSection.AddParagraph();
            paraMain.Format.Borders.Visible = true;
            paraMain.Format.RightIndent = Unit.FromCentimeter(5);
            paraMain.AddFormattedText("English\n",fontMainTitle);
            paraMain.AddLineBreak();
            paraMain.Format.Font = fontMain;
            paraMain.AddText(Sample.English);
            paraMain.AddLineBreak();
            //2段落目(日本語文は改行されずに)
            paraMain = document.LastSection.AddParagraph();
            paraMain.Format.Borders.Visible = true;
            paraMain.Format.RightIndent = Unit.FromCentimeter(5);
            paraMain.AddFormattedText("日本語コンテンツ\n", fontMainTitle);
            paraMain.AddLineBreak();
            paraMain.Format.Font = fontMain.Clone();
            paraMain.AddText(Sample.Japanese);
            paraMain.AddLineBreak();
            //3段落目
            paraMain = document.LastSection.AddParagraph();
            paraMain.Format.Borders.Visible = true;
            paraMain.Format.RightIndent = Unit.FromCentimeter(5);
            paraMain.AddFormattedText("日本語コンテンツ(1文字ずつ)\n", fontMainTitle);
            paraMain.AddLineBreak();
            paraMain.Format.Font = fontMain.Clone();
            foreach (char c in Sample.Japanese)
            {
                paraMain.AddFormattedText(c.ToString(), fontMain);
            }
            paraMain.AddLineBreak();

            document.LastSection.AddPageBreak(); //改ページ

            //テーブル表記
            paraMain = document.LastSection.AddParagraph();
            paraMain.AddFormattedText("歴代大会結果", fontMainTitle);
            Table tableResult = new Table();
            tableResult.Borders.Visible = true;
            tableResult.Rows.Height = 25;
            //7列作成
            var columnResult = tableResult.AddColumn(Unit.FromCentimeter(0.8));
            columnResult = tableResult.AddColumn(Unit.FromCentimeter(1.8));
            columnResult = tableResult.AddColumn(Unit.FromCentimeter(3.1));
            columnResult = tableResult.AddColumn(Unit.FromCentimeter(0.5));
            columnResult = tableResult.AddColumn(Unit.FromCentimeter(3.1));
            columnResult = tableResult.AddColumn(Unit.FromCentimeter(3.8));
            columnResult = tableResult.AddColumn(Unit.FromCentimeter(3.1));
            //ヘッダ1行目
            row = tableResult.AddRow();
            para = row.Cells[0].AddParagraph(); para.AddFormattedText("回", fontMain);
            para = row.Cells[1].AddParagraph(); para.AddFormattedText("開催年", fontMain);
            para = row.Cells[2].AddParagraph(); para.AddFormattedText("開催国", fontMain);
            para = row.Cells[3].AddParagraph();
            para = row.Cells[4].AddParagraph(); para.AddFormattedText("決勝戦", fontMain);
            row.Cells[4].MergeRight = 2;
            row.Cells[0].MergeDown = 1;
            row.Cells[1].MergeDown = 1;
            row.Cells[2].MergeDown = 1;
            row.Cells[3].MergeDown = 1;
            //ヘッダ2行目
            row = tableResult.AddRow();
            para = row.Cells[4].AddParagraph(); para.AddFormattedText("優勝", fontMain);
            para = row.Cells[5].AddParagraph(); para.AddFormattedText("結果", fontMain);
            para = row.Cells[6].AddParagraph(); para.AddFormattedText("準優勝", fontMain);
            foreach (var result in Sample.Results)
            {
                row = tableResult.AddRow();
                if (result.Organized)
                {
                    para = row.Cells[0].AddParagraph(); para.AddFormattedText(result.Number.ToString(), fontMain);
                    para = row.Cells[1].AddParagraph(); para.AddFormattedText(result.Year.ToString() + "年", fontMain);
                    para = row.Cells[2].AddParagraph(); para.AddFormattedText(result.Host, fontMain);
                    para = row.Cells[3].AddParagraph();
                    para = row.Cells[4].AddParagraph(); para.AddFormattedText(result.Champion, fontMain);
                    para = row.Cells[5].AddParagraph(); para.AddFormattedText(result.FinalScore, fontMain);
                    para = row.Cells[6].AddParagraph(); para.AddFormattedText(result.RunnersUp, fontMain);
                }
                else
                {
                    para = row.Cells[1].AddParagraph(); para.AddFormattedText(result.Year.ToString() + "年", fontMain);
                    para = row.Cells[4].AddParagraph(); para.AddFormattedText(result.NotOrganizedReason, fontMain);
                    row.Cells[4].MergeRight = 2;
                    row.Cells[4].Format.Alignment = ParagraphAlignment.Center;
                }
            }
            document.LastSection.Add(tableResult);

            //フッター作成
            var paraFooter = new Paragraph();
            paraFooter.AddPageField();
            paraFooter.AddText(" of ");
            paraFooter.AddNumPagesField();
            paraFooter.AddText(" Page");
            paraFooter.Format.Alignment = ParagraphAlignment.Center;
            sectionMain.Footers.Primary.Add(paraFooter);

            //レンダリングしてPDFを出力
            PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(true);
            pdfRenderer.Document = document;
            pdfRenderer.RenderDocument();
            using (MemoryStream ms = new MemoryStream())
            {
                pdfRenderer.PdfDocument.Save(ms);
                return File(ms.ToArray(), "application/pdf", "sample.pdf");
            }
        }
    }
}
using PdfSharp.Fonts;
using System;
using System.IO;
using System.Reflection;

namespace MigraDocSample
{
    // 日本語フォントのためのフォントリゾルバー
    public class JapaneseFontResolver : IFontResolver
    {
        private static readonly string YUMIN_TTF =
            "MigraDocSample.fonts.YUMIN.TTF";

        public byte[] GetFont(string faceName)
        {
            switch (faceName)
            {
                case "YUMIN":
                    return LoadFontData(YUMIN_TTF);
            }
            return null;
        }

        public FontResolverInfo ResolveTypeface(
                    string familyName, bool isBold, bool isItalic)
        {
            var fontName = familyName.ToLower();

            switch (fontName)
            {
                case "yumin":
                    return new FontResolverInfo("YUMIN");
            }

            // デフォルトのフォント
            return PlatformFontResolver.ResolveTypeface("Arial", isBold, isItalic);
        }

        // 埋め込みリソースからフォントファイルを読み込む
        private byte[] LoadFontData(string resourceName)
        {
            var assembly = Assembly.GetExecutingAssembly();
            string[] names = assembly.GetManifestResourceNames();
            using (Stream stream = assembly.GetManifestResourceStream(resourceName))
            {
                if (stream == null)
                    throw new ArgumentException("No resource with name " + resourceName);

                int count = (int)stream.Length;
                byte[] data = new byte[count];
                stream.Read(data, 0, count);
                return data;
            }
        }
    }
}
Sample.XXXはサンプル用のデータです。
フォントリゾルバーに登録するファイル名は大文字小文字を区別しますので間違えると機能しません。
また、フォントリソースを忘れずに「埋め込みリソース」にする事も注意が必要です。

英文はパラグラフ内で自動的に改行されるのですが、日本語が改行されないのは上手く解決できませんでした。

この他にもPDFSharpを利用してHTMLからPDFを出力するHTML Rendererというものもあります。


以上メモまで。


2017年11月17日金曜日

メイリオで縦書き印刷が上手くいかない

娘のカタカナの勉強にとパワーポイントでカルタを手作りしようとしたところ、
めったに使わない「縦書き」で長音(ー)やカギ括弧(「」)が上手く印字されませんでした。
どうしたものかと調べたところ、去年から指摘されていた事だったようです。

フォーラムでの指摘に対し、MSの回答は「フィードバック出してくれ」で、その後音沙汰なし・・・。



うーむ。

2017年8月28日月曜日

Web Deploy に失敗する

Web Deploy で IIS に発行しようとしたところ、「接続の検証」には成功しているのに以下のエラーが発生して失敗してしまいました。

重大度レベル コード カテゴリ 説明 プロジェクト ファイル 行 抑制状態
エラー Web Deploy タスクに失敗しました。((2017/08/28 17:33:28) リモート コンピューターでの要求の処理中にエラーが発生しました。)

(2017/08/28 17:33:28) リモート コンピューターでの要求の処理中にエラーが発生しました。
操作を実行できません。サーバー管理者に問い合わせて承認と委任の設定を確認してください。

サーバ側のエラーを確認したところ以下のようなメッセージが

トレース展開エージェントで例外が発生し、クライアントに伝達されました。
エラーの詳細:
Microsoft.Web.Delegation.DeploymentAuthorizationException: ユーザー '.\WDeployConfigWriter' にログオンできません。 ---> System.Runtime.InteropServices.COMException (0x80070532): ログオン失敗: 指定されたアカウント パスワードの有効期間が切れています。 (HRESULT からの例外: 0x80070532)


Web Deploy の設定をすると、ユーザアカウントに「WDeployAdmin」と「WDeployConfigWriter」というアカウントが作られるのですが、パスワードの設定がデフォルトで「ユーザーは次回ログオン時にパスワードの変更が必要」になっています。
これらのパスワードが期限切れになってしまい、上記のエラーとなったようです。
解決方法は以下の通り。

1.「WDeployAdmin」と「WDeployConfigWriter」のパスワードを再登録し、設定を「パスワードを無期限にする」に変更する。

2.IISマネージャからサーバの「管理サービスの委任」を開き、上記2アカウントが割り当てられているサービスの編集画面を開く。資格情報の指定の「設定」ボタンでパスワードの設定画面を開き1で設定したパスワードを入力する。

3.改めて「Web配置による発行の有効化」を行いデプロイの設定を行う。

(参考)



以上メモまで。

2017年7月27日木曜日

IIS, Classic ASP でサイトが重い

メール送信時にサイトが重いなぁと思っていたら、どうやらデバッグの設定に問題があったようです。

ASP のサーバー側のデバッグを有効にすると、ASP はシングルスレッド モードで実行されます。パフォーマンス上の理由から、製品環境での ASP のサーバー側またはクライアント側のデバッグはお勧めできません。

Microsoft TechNet オンライン:IIS 6.0 F1: [アプリケーションの構成] - [デバッグ] タブ
https://technet.microsoft.com/ja-jp/library/cc732003

また、初歩的なところでつまづいてしまった。
以上メモまで。

2016年1月27日水曜日

【SQL Server】テーブルとデータの複製【SSMS】

色々と方法はあるかと思いますが、SSMSを使って
データベース右クリック → 「タスク」 → 「スクリプトの生成」から行えます。








上記画面「詳細設定」を開きます。



「スクリプトを生成するデータの種類」で目的のものを選択します。
データを含める場合は「スキーマとデータ」を選択します。


テストデータ含めて別環境にコピーしたい時などは
これを利用すると便利です。

以上メモまで。



2015年7月22日水曜日

アクションパックのVisual Studioはプロダクトキー不要、ソフトウェアからサインインして認証するらしい

先日Visual Studio 2015 RTMがリリースされました。
会社でアクションパックのライセンスを持っているのでダウンロードしようとしたのですが、
どこから落とすのか皆目わからずハマってしまいました。

MSDNサブスクリプション
https://msdn.microsoft.com/ja-jp/subscriptions

ここからダウンロードするようになっているみたいで
(アクションパックのソフトウェアダウンロード画面にあれば良いのに・・・)
確かに該当するリンクは発見でき、ISOファイルのダウンロードもできました。
そして、いざプロダクトキーを取得しようとしたところ・・・。



何かこちらの設定が間違っているのではないかとメールを確認したり、ググったり、ビングったり。
結局わからなかったので、msdnのカスタマーセンターのお問い合わせフォームから質問を
送信したところエラー。
チャットがつながったのですが、アクションパックのカスタマーセンターへ誘導され、
そちらに電話してようやく表題の回答をもらって解決いたしました。

「お客様のサブスクリプションご契約内容には、この製品のプロダクトキーは含まれておりません。」
なんて表示されたら焦ってしまいますよね。
そもそも画面構成がわかりにくかったり、挙動が不安定だったり、なんとかして欲しいなぁとは思うのですが・・・。
こんな事で困っているのはワタシだけなのでしょうか?