WPFのListBox.SelectedItemの挙動がおかしい

最近、ツールを作るときに、Windows Forms ではなくて、WPF を使っています。

理由の第一は、UI が綺麗に作れるから、なんですが、通常のフォームアプリケーションを作るのと勝手が違う or 動きがおかしい、とろが多々あって、ちょっと避けるべき理由もちらほら。

今、使っているのは WPF のリストボックスなのですが、どうやら、

  1. リストボックスの項目を Remove メソッドで削除する。
  2. カーソルを設定するために SelectedIndex で選択させる。
  3. この後、カーソルキーの上矢印や下矢印キーを押すと、先頭にカーソルが移動してしまう。

という現象です。

削除する場合は、次のコードのように、DELETEキーを押したときに、選択行を削除します。

private void listBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
        int index = listBox1.SelectedIndex;
        listBox1.Items.RemoveAt(index);
        index–;
        if (index < 0) index = 0;
        listBox1.SelectedIndex = index;
    }
}

こうするとですね、せっかく SelectedIndex を設定していのに、上下の矢印キーで先頭の行にジャンプしてしまうんですよね。。。どうも、SelectedIndex の値が、内部で反映されていない気がします。

# 似たような現象を、Siverlight の ListBox で経験したような覚えがあるんだけど…ちょっと、解決策を思い出せず。
# XAML で保持しているプロパティに反映されていない雰囲気なんですね。

解決したら追記を書きます。

追記 2010/07/08
へっぽこ独自Silverlightフレームワークが、そんな動きをしていたなぁと思い出した。
MVVM が分かっていなくて、コントロール自身をINotifyChangedをしていたフレームワーク。
まさか、そんなことあるまいな>MS

追記 2010/07/08
どうやら、バグっぽい。

全く同じコードをWindows フォームで動かすと正常に動くので、Microsoftさんにフィードバックしました。
http://connect.microsoft.com/VisualStudioJapan/feedback/details/573823/wpf-listbox-selectedindex

カテゴリー: 開発 | WPFのListBox.SelectedItemの挙動がおかしい はコメントを受け付けていません

LINQで外部結合を実装する

SQL で外部結合をする場合は、さくっと left join や *= などを使えば良いのですが、LINQ だといまいち不明。

だったので、探してみました。

Visual Studio 2010 – Visual C#
方法 : 左外部結合を実行する (C# プログラミング ガイド)
http://msdn.microsoft.com/ja-jp/library/bb397895.aspx

という感じで、モロ、そのままの記事がありました。以前は、LINQ関係は調べるのが大変だったのですが、これは良さそうですね。

備忘録も込みで、解説を加えておくと、

  • Person、Pet というテーブルがあります。
  • Person(人)は、Pet(ペット)を飼っている、というイメージですね。
  • Personには、ペットを飼っていない人もいます。

        public class Person
        {
            public string FirstName { get; set; }
            public int? PetID { get; set; }
        }
        public class Pet
        {
            public int ID { get; set; }
            public string PetName { get; set; }
        }
        List<Person> persons;
        List<Pet> pets;

こんな風にデータを初期化しておきます。

        // 初期化
        private void button1_Click(object sender, EventArgs e)
        {
            persons = new List<Person>();
            persons.Add(new Person() { FirstName = “masuda”, PetID = 1 });
            persons.Add(new Person() { FirstName = “tomoaki”, PetID = null });
            persons.Add(new Person() { FirstName = “kyonpu”, PetID = 2 });

            pets = new List<Pet>();
            pets.Add( new Pet() { ID=1, PetName=”taro” });
            pets.Add( new Pet() { ID=2, PetName=”risumo” });
        }

■ペットを飼っている人(内部結合)

        // 内部結合
        private void button2_Click(object sender, EventArgs e)
        {
            // ペットがいる人を表示
            var ret = from pe in persons
                      join pet in pets on pe.PetID equals pet.ID
                      select new { pe.FirstName, pet.PetName };

            foreach (var it in ret)
            {
                Debug.Print(it.ToString());
            }
        }

■ペットを飼っている人もそうでない人も表示(外部結合)

        // 外部結合
        private void button3_Click(object sender, EventArgs e)
        {
            // ペットがいる/いないに関わらず表示
            var ret = from pe in persons
                      join pet in pets on pe.PetID equals pet.ID into sub
                      from t in sub.DefaultIfEmpty()
                      select new {  pe.FirstName, PetName = ( t == null ? “”: t.PetName )};

            foreach (var it in ret)
            {
                Debug.Print(it.ToString());
            }
        }

■ペットを飼っていない人だけを表示(null比較)

        // 外部結合(nullのみ抽出)
        private void button4_Click(object sender, EventArgs e)
        {
            // ペットがいない人を表示
            var ret = from pe in persons
                      join pet in pets on pe.PetID equals pet.ID into sub
                      from t in sub.DefaultIfEmpty()
                      where t == null
                      select new { pe.FirstName };

            foreach (var it in ret)
            {
                Debug.Print(it.ToString());
            }
        }

こんな風に、一度 into を使ってサブテーブル(sub)を用意してから、DefaultIfEmpty メソッドで外部結合を実現する、という方法になります。

 

カテゴリー: 開発 | LINQで外部結合を実装する はコメントを受け付けていません

App_Dataフォルダにデータベースを作成できませんの対処

ASP.NET MVC の プロバイダー データベースの自動作成の落とし穴
http://www.moonmile.net/blog/archives/980

の顛末について、書いておきます。

現象としては、

  • Visual Studio 2010 で作った、ASP.NET MVC のプロジェクトで、ログインしようとするエラーが発生する。

です。

エラーメッセージは、

ユーザー インスタンスのプロセスを起動中のエラーにより、SQL Server のユーザー インスタンスを生成できませんでした。接続は閉じられます。

ですね。

環境は、

  • Windows 7 Ultimate
  • Visual Studio 2010 Professional
  • SQL Server 2008 R2 Express Edition 

ですが、バージョンはあまり関係ありません。「SQL Server 2008 Express Edition」のところしか関係ありません。

ちなみに、上記の環境で ASP.NET MVC アプリを作成して、ログインをすると「ログイン」できます。なので、普通にやっている分には問題ありません。

■現象

問題は、次の手順をやってしまったときです。

  1. Visual Studio 2010 をインストールする。
  2. SQL Server 2008 Express Edition が同時にインストールされる。
  3. SQL Server 2008 R2 を入れようとして、一旦、SQL Server 2008 Express Edition をアンインストールする。
  4. SQL Server 2008 R2 Express Edition をインストールする。

のように、SQL Server の Express Edition を「アンインストール」→「再びインストール」したときに発生します。

このログインできない現象は、ASP.NET MVC に限りません。

  • ASP.NET のログインコントロールを使った場合
  • ローカルデータベースファイルを ADO.NET でオープンしようとした場合
  • サーバーエクスプローラーで、ローカルデータベースファイルを追加しようとした場合

でも発生します。

■対処

先に対処方法を書いておきます。

Windows Vista/7 の場合は

C:\Users\ユーザ名\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS\ のフォルダを「削除」して下さい。

Windows XP の場合は、Documents and Settings の中です。

ここの中にある各ファイルが邪魔をしています。

■原因

主原因は、SQLEXPRESS\ の中にある、master.mdf などのシステムファイルが、インストール前後で不整合を起こしているためです。このため、ASP.NET のログインコントロールからアクセスしようとしたときに、前後の不整合のために、「インスタンスが生成できません」というエラーになります。

これが発生してしまうのは、SQL Server 2008 Express Edition(2005も同様)をアンインストールしたときに、該当するユーザー領域のデータ(SQLEXPRESS\配下のファイル等)を削除しないためです。
ユーザー領域なので、おそらく、別ユーザーでログインしたときはつながる、という見かけ上、不思議な現象になります。

■情報源

Google で「Microsoft SQL Server Data SQLEXPRESS AppData」で検索すると、いくつかの質問がヒットします。

App_Dataフォルダにデータベースを作成できません
http://social.msdn.microsoft.com/Forums/ja-JP/vwdexpressja/thread/13919e51-b9f9-4ab4-8ef7-92dce872851b

公式なところでは、

SQL Server Express ユーザー インスタンスへの接続 (ADO.NET)
http://msdn.microsoft.com/ja-jp/library/ms254504.aspx

管理者以外のユーザーのためのユーザー インスタンス
http://msdn.microsoft.com/ja-jp/library/ms143684.aspx

を読むと、上記のフォルダ「C:\Users\ユーザ名\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS\」が関係していることが分かります。

 

カテゴリー: 開発 | App_Dataフォルダにデータベースを作成できませんの対処 はコメントを受け付けていません

ASP.NET MVC の プロバイダー データベースの自動作成の落とし穴

現在調査中なので、明確ではないのだが、

  • Windows 7
  • SQL Server 2008 R2 ( Express を含む )
  • ASP.NET MVC のログイン

には、落とし穴がある。。。

ASP.NET MVC のサンプルアプリケーションを作ると、自動で「ログイン」の機能が追加される。これは、ログインアカウントを作成する時に、App_data 内にファイル形式のデータベースを作って、ログイン機能を用意してくれる便利な機能なのです(ローカルデータベースに、ユーザー管理を任せてしまうのは、どうか?という話は別として、サンプル/小規模開発ならばこれでOK)。

しかし、これが、Windows 7 + SQL Server 2008 R2 の場合には、以下のようなエラーが出る。

20100704_03.jpg

ユーザー インスタンスのプロセスを起動中のエラーにより、SQL Server のユーザー インスタンスを生成できませんでした。接続は閉じられます。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

SQLExpress データベースの自動作成エラー:
接続文字列は、アプリケーションの App_Data ディレクトリ内にあるデータベースの場所を使用する、ローカルの SQL Server Express インスタンスを指定しています。プロバイダーはデータベースが存在しないと判断したため、アプリケーション サービス データベースを自動的に作成しようとしました。アプリケーション サービス データベースの存在を正しく確認し、このデータベースを自動的に作成するには、次の構成が必要です:

これが何を示すかというと、

  • 最初のログインをしたときに、App_Data配下にデータベースのファイルがなかったので、作ろうとしたんだが、作れなくてエラーになった。

ということです。

このあたりの原因としては、

  • ASP.NETを起動しているアカウント(デフォルトでは、Network service)が、App_Data へのアクセス権がない。

が考えられるのだが、

アプリケーションが Windows 7 または Windows Server 2008 R2 で実行されている場合、プロバイダー データベースの自動作成を有効にするには、特別な構成手順が必要です。追加情報については、http://go.microsoft.com/fwlink/?LinkId=160102 を参照してください。アプリケーションの App_Data ディレクトリがまだ存在しない場合は、Web サーバー アカウントに、アプリケーション ディレクトリへの読み書きアクセスが与えられていなければなりません。これは、アプリケーションの App_Data ディレクトリが存在しない場合、Web サーバー アカウントがこのディレクトリを自動的に作成するために必要です。

というのが、かなり怪しい…感じでして。どうも、「特別な構成手順」なるものを見る限り、非常に特別らしい(苦笑)。

素直に、ログインのアクセスを、ファイルじゃない通常のデータベース上に作成すればいいのだが、ASP.NET MVC 本の手前、初心者向きにはどうするべきか、と思案中なのです。

しかも、上記の「特別な手順」をやったにも関わらず(多分、何かが抜けているんだろうけど)、それでもエラーがでる orz。

う~む、どうするべきか?

追記 2010/07/05

http://www.moonmile.net/blog/archives/984 に顛末を書きました。解決できます。

カテゴリー: 開発 | 2件のコメント

とあるASP.NET MVC本を執筆中

前宣伝がてらに。

実は、某出版社で出すための「ひと目 ASP.NET MVC アプリケーション開発入門(仮)」を執筆中です(って、全然伏せてないぞ、これ)。

で、この執筆記事は、某社の Code Recipe サイトに同時連載する予定です(って、これも全然伏せてないし)。

中身的には、

  • 「ひと目」の読者層に合わせて、手順を追って ASP.NET MVC サイトが作れるよ。
  • WEB 連載のほうは、ASP.NET MVC に限らず、WEB 全般のテクニックも合わせて、紹介するよ。

となります。

 MVC 関連としては、Struts や CakePHP をはじめとして、完全に後塵を拝していますが(笑)、テクニック的には、どれも「MVCパターン」というところで似ています。

現在、執筆しているサンプルサイトは、「日経BPショッピング」でして、

  • ログイン機能がある
  • ショッピングカート機能がある

ものを想定しています。

20100701_02.jpg

 

20100701_03.jpg

な感じです。非常に簡単ではありますが、基本機能だけは押さえてあります。

本として追加してほしい技術があれば、コメントください、月末までは追加可能ですので。

 

カテゴリー: 設計, 書籍 | 4件のコメント

日本証券業協会のアレ(図解編)

日本証券業界のアレが、あまりにも●●なので、図解を作りました。

皆さんで、あまりにもアレな雰囲気を堪能してください。
そして、できたら、

パブリックコメント
http://www.jsda.or.jp/html/oshirase/public/bosyu.html

してくださると良いかな、と。

スライド1

スライド2

スライド3

スライド4

スライド6

スライド7

スライド8

スライド9

スライド10

スライド11

スライド12

な感じですね。ワタクシには、まったく理解不可能なやり方をしているんですが。不可思議です。

PDF のほうは↓からダウロードできます。

http://moonmile.net/pdf/jsda_are.pdf

カテゴリー: 雑談 | 2件のコメント

日本証券業協会のアレ

普段、このブログは「ノンポリ」でして、ポリシーを持って「ノンポリ」を貫いているわけですが(笑

問題が↓です。

新規公開前に行われる不適切な自己募集を規制するための「有価証券の引受け等に関する規則」等の一部改正について
http://www.jsda.or.jp/html/oshirase/public/bosyu.html

タイトルが長すぎてなんのことか分かりづらいですが、駒林さんの言葉を借りれば「資本主義の全否定」、私的に言えば、「じじいのやることは若者には理解できんよ」ってな感じです。

改正部分は、付属のPDFを読んでほしいのですが、

簡単に言うと、会社(あるいは個人が)、資金を集める方法を規制しようという案です。
通常は、会社を立てるときに、

  1. 上場前の企業が、投資家を集めて資金を得たい。
  2. 資金を個人投資家やエンジェルの制度を利用して、資金を集める。
  3. そして、資金が集まって、仕事をたくさんやって、目指すは「上場企業」だ。

な手順を踏むことが多いのですが(資金を集めない場合も多いです)。

ここに、詐欺行為をする悪い人がいて、

  1. 詐欺をする人が、投資家から金を吸い取りたい。
  2. 上場前の企業を装って、個人投資家(特に小金持ちの高齢者)に、投資を勧める。
    「必ず、投資した金額の2倍は儲かりますよ」みたいな感じ。
  3. で、計画倒産

なことをする。あるいは、

  1. 上場前の悪い企業が、なんらかの業績を騙って、資金を得たい。
  2. なんかアイデアを装って、個人投資家(特に小金持ちの高齢者)に、投資を勧める。
  3. 上場できれば儲けもの、でなければ、夜逃げ。

みたな形でお金を集めようとします。

なので、この詐欺の人を規制するために、

  • 上場前の企業は勝手に、個人投資家に投資してもらっちゃダメ。

ってのが、この改正案なのですね。もちろん、改正のほうには、

  • 適正な資本政策目的で行われたと考えられる株券等の募集等について、引受け禁止
    の適用除外として規定する。

と抱えているので、「正当な理由があれば大丈夫」って、ことになっていますが。

ええ、問題はアリアリですね。都条例のアレのように、「適正な」の基準が曖昧ですし、「適正」かどうかは上場時の審査でわかるので、上場前の資金集めのときにはわからない、という落とし穴があります。

なので、これが通ってしまうと、

  • 個人投資家は、投資をすると、その会社は上場できない可能性がある。
  • 資金を集めたい会社が、個人投資家に投資をしてもらうと、将来的に上場できない可能性がある。

という心理が働き、結果的に、個人投資家(エンジェルの制度も含む)から投資を受けられなくなります。
# 上場しなければいいんだけどね、でも、大抵の会社は「上場」を目指しているでしょう?

ちなみに、抜け道として、

  • 詐欺行為をして、個人投資家から資金を吸い上げる会社を作る。
  • そして、その会社を、別会社で買収する。

ってな手順を踏めば、上場できてしまうのです、、、なんだかなぁ、ザルでもあり、善意な方には損でもあり。

~~~

さらに、問題がですね。このパブリリックコメントの募集ってのが、インターネット上でしか行われてなくて、ひっそり出てるだけなんですよね。

募集期間は、「平成22年6月10日~7月1日17時まで」、なんて書かれていますが

パブリック・コメントの募集について
http://www.jsda.or.jp/html/oshirase/public/bosyu.html

知らないと、言えないんじゃ、全然「通じたこと」にはなりませんぜ!
パブリックコメントは、7月1日までなので、お早めに!

日本証券業協会が「有価証券の引受け等に関する規則」等の一部改正についてのパブリックコメント募集中
http://uva.jp/dh/mt/archives/005228.html

「有価証券の引受け等に関する規則」の改正案に反対します
http://blogs.itmedia.co.jp/pina/2010/06/post-5bea.html

さらに個人投資家を減らす暴挙に出る官僚たちの夏
http://ameblo.jp/takapon-jp/entry-10573564989.html

なところも参考にしてください。

ちなみに「エンジェル」ってのは、

エンジェル投資家
http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%82%B8%E3%82%A7%E3%83%AB%E6%8A%95%E8%B3%87%E5%AE%B6

のことです、起業家が最初の資金を調達する手段として使われています。
google で「エンジェル 投資家」で検索すると、いくつかのマッチングサイトがでてきます。

カテゴリー: 起業塾 | 2件のコメント

Amazon アフリエイト クローン(準備)

Amazon アソシエイト API 調べ(2)
http://www.moonmile.net/blog/archives/846

の構想の続きです。

物欲Web、terabon.net の api に使いますが、現状と目的を列記すると、

■現状

  • 紙の書籍は、ほとんどが amazon に牛耳られている。
    → 実際、amazon で発送されるほうが便利だ(一時期は、セブンイレブンの ebooks を使っていた)。
  • なので、アフリエイト等は、amazon が一番。
  • なので、ブログの露出率も amazon が一番

だから、電子書籍の宣伝も amazon 系列に乗せないと、流通的に難しい?

が、本当にそれでいいのか?が発端です。

■目的

  • amazon のような露出(広告)を得るためには?
  • 少量多種の電子書籍に備える方法とは?
    → 紙の本だと、部数が2,000部以上じゃないと採算的に無理だが、電子書籍の場合は、製作費を無視すれば、1冊からでもよい。
    → 個人ベースで発行が可能なので、本当の「少量多種」の時代になるだろう。「有象無象」的にもなるが。

を考えたときに、いくつか手段があるわけですが、そのひとつの案として、

■手段

  • amazon アフリエイトの電子書籍版を作る。
    → ブログに張り付けられる(画像ファイル、購入ボタン等)
  • 購入は各サイトで行う。
  • 販売促進の広告のみに特化する。

というのを考えつつあります。

image

収益は別な形で作ることになりますが、

  • 安価な電子書籍を流通させるために、本自体に広告費をつけない。
  • 同様に、Amazon アフリエイトのようにブログパーツ自体に収入はない。
    → 広める要因が低くなるのですが、本自体が趣味の世界に入り込むので、最初は FAN 層が相手になります。

な感じでスタートするのがよいかなぁと。

よく、本を紹介するときに amazon のブログパーツを利用しますが、それの電子書籍版です。表紙が出ると紹介しやすいし、本のイメージが付きやすい。なので、ブログを見た人が本を購入しやすくなる、という流れになります。

いわゆる、apple store での、apple が推し進める方法を真似するわけです。fan を作って、その fan が宣伝してくれる、というスタイル。

現状ブログパーツとして作ろうと思っているのは、

  • amazon の書籍指定のパーツ
  • amazon のおすすめ flash パーツ

なクローンを作る予定です。

データの収集先は、

国産電子書籍サービスのデバイス制限、課金システム、購入体験をまとめてみたhttp://blogs.itmedia.co.jp/closebox/2010/06/post-927f.html

にある電子書籍なところ。あとは同人誌関係ですね。

カテゴリー: 設計, 起業塾 | Amazon アフリエイト クローン(準備) はコメントを受け付けていません

Outlook 2010の配色を変える

おとといから、Microsoft Office 2010を使い始めました。しばらく、2003と2007の併用で使っていたのですが、ひとまず、業務マシンのほうを変更して、2010と2007併用で行くかと。

いうわけで、まずは Outlook 2010 なのですが、配色が変わっている…

■Outlook 2010の場合

image

画面が白っぽい…というか「銀」だそうです。

ちなみに、Outlook 2007の場合は、「青」

image

しばらく、色が変なんが気づかなくて「いらいら」していたんですが、考えてみれば色を変えればいいわけで、

 

■色を変更する

1.左上の「ファイル」をクリック

image

2.画面が切り替わったら「オプション」をクリック

image

3.オプションダイアログで、配色を変えます。「銀」がデフォルトで、「青」「黒」があります。

image 

 

配色を「青」にすると、2007の配色と同じ感じ。

image

配色を「黒」にすると、ちょっとうつうつな感じw

image

 

Excelなんかは「青」なのに。デフォルトで統一してほしかったなぁと。

image

カテゴリー: 雑談 | Outlook 2010の配色を変える はコメントを受け付けていません

コニカさん向け電子書籍への考察

電子書庫を作る その4 それぞれ可能か調べる
http://ameblo.jp/konica/entry-10556923268.htm

あああ、今月中という縛りがなければ、iPad 1台分で請けるのに…(それでも高いか?)と思ったけど、さてどうなるものか?

私の場合は、Flashは苦手(Action Scriptを知らない)ので、1000冊ベースのパンフレット(だと思う)を電子書籍化するのであれば、HTML5、あるいは、Silverlightになる。Silverlightだと、クライアントにインストールが発生するのだが、市場的に言えば Flash に迫りつつある(と仮定し)ので、一般向けであってもそんなに苦にならないだろう。利用者が本当に不特定多数の場合は、かなり躊躇するところではあるが。

実は、HTML5でも同様で、FirefoxやSafariなんかは対応しているけど、肝心のIE(シェアが高い、一般のWindowsユーザが多く使っているという意味で)は、HTML5に対応していない。なので、ユーザ層を考慮した場合、現状では、ブラウザに引きずられてしまう HTML5 よりも、インストールすればなんとかなる Flash や Silverlight のほうがプラットフォームとして利用価値が高い。勿論、iPad や iPhone では Flash が動かない(話題に上らないが、Silverlight も動かない)ので、実質選択肢としては、HTML5 にならざるを得ない。

三すくみ状態になっている。

実は、jQueryを使ったドラッグ&ドロップは、iPad では動かない。つまり、商品をタッチして、カートへドラッグ&ドロップ、なんて技を jQuery を使って書けない。で、どうするかというと、実は HTML5 でドラッグ機能が用意されている。Apple の HTML5 のサイトを見ると、iPad のソフトタッチを使って、カメラの視点を移動させたり、製品を回転させたりすることができる。ソースはまだ覗いていないが、HTML5 を使えば可能、ということは分かる。

 

そんな訳で、どの技術を使っても汎用性が得られない。強いて言うならば、ごくノーマルな HTML4 を使って書かれたページを、ブラウザ上で捲る(ボタンをクリックした座標で判断する)、クリッカブルマップなどを使って指定した写真を拡大する、なんてことが一番汎用性がある。

が、

それだとあまりに詰まらない?ので、Silverlightで1000冊のパンフレットを電子書籍化するパターンを考察してみる。

 

1. 回線が太ければ、あらかじめ、PDFを画面キャプチャしてしまう。

単純ながら、一番効果的な方法である。漫画onWeb のように、Flash で捲るのもよし、Silverlightで捲るのもよし。白黒あるいはグレースケールで良ければ、画像サイズが抑えられるので、この方法は有効である。

拡大、縮小に関しては、あらかじめ3段階の拡大画像を用意しておき、切り替える。表示座標位置をViewBoxなどを使って表示すれば簡単だ。

 

2. PDFをそのまま利用する。

Flash で PDF を表示する方法があるか不明なのだが、Silverlight4 の場合は、ブラウザコントロールをSilverlight 内で使うことで PDF を表示出来るはずだ。

ブラウザコントロールは、他のタグ(図形やテキストなど)と同様に回転や移動も可能なので、画面をキャプチャしたときと同じアニメーションが可能になる。

ただし、拡大に関してはブラウザコントロールで実行可能か、調べる必要がある。

 

3. HTMLタグに直してから表示する。

PDFのファイルを、HTML形式かePub形式に変換できるのであれば、これを使うという方法もある。

ただし、コニカさんが書いているように「ePub形式もちょっとアレ」なところがあるし、そもそもパンフレットを内部で電子化するのに ePub 形式のような公開フォーマットは必須ではない。

 

なパターンを考えた。ちょっと経過観察。

カテゴリー: 開発 | 3件のコメント