6 返信 最新の回答 日時: Jan 21, 2009 3:15 PM ユーザー:(radeon)

    htmlでのPDFページリンクについて(Mac ローカル)

      ローカルの(DVDに保存した)htmlをブラウザで開き、ブラウザ内でPDFを表示させるものを制作中です。

      PDFの各ページにリンクを付けたのですが、Macのsafariだけ、どのページを指定しても最初のページしか表示されません。
      (WindowsではIE、Firefox、safari全て成功しています)

      pdfは、iframe内に表示させる為、簡単に書くと以下の様なjavascriptで表示させています。

      ↓ページのリンクをクリック時
      var pdf_name = 'hogehoge';
      var page = '3';
      var pdf = '../pdf/' + pdf_name + '.pdf#page=' + page;
      location.replace(pdf);

      ↓最初に画面を開く時
      document.getElementById('iframe_hoge').src = pdf;

      Webサーバにアップロードして動作確認をすると、上手く動作するのですが、
      ローカルでは動作しません。
      プログラム部分は、javascriptしか使っていません。

      OS等の情報は下記の通りです。
      OS:Intel Mac OS X 10.5.6
      WEBブラウザ:safari 3.1.2
      PDFビューワ:Adobe Acrobat Reader 9

      何卒、ご教授の程、宜しくお願い致します。
        • 1. Re: htmlでのPDFページリンクについて(Mac ローカル)
          Level 1
          Macユーザではないので以下は推測です。

          > 以下の様なjavascriptで表示させています
          Javascriptではなく、直接、フルのURL形式(絶対表記)で表示させられるかどうかは確認しているでしょうか?

          > var pdf = '../pdf/' + pdf_name + '.pdf#page=' + page;
          過去投稿でも出ていますが、PDFをページ指定で開かせる方法は必ずしもうまく動作するわけでもないようです。

          おそらくは下記文書を参考にしているでしょうが、「URL limitations」とかの問題とかは?

          Parameters for Opening PDF Files
          http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters_v9.pdf

          > location.replace(pdf);
          location.hrefに値を入れることで現在のURLを書き換える動作ではどうでしょう?
          location.reload()で再読み込みさせるとどうでしょう?
          WEBブラウザのキャッシュクリアとかは?
          • 2. Re: htmlでのPDFページリンクについて(Mac ローカル)
            Level 1
            続けて推測です。

            MacではOSレベルでPDFプレビュー機能があったと思いますが、Adobe ReaderではなくPDFプレビュー機能で表示されている可能性は?

            「Adobe AIR」で対処するのも一方法かもしれません。
            ヘルプによれば、ナビゲーションなどのPDFコンテンツの制御ができるとあります。実際に可能かどうかはわかりませんが。

            Adobe AIR 1.5 * PDF コンテンツの追加
            http://help.adobe.com/ja_JP/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7eb4. html#WS5b3ccc516d4fbf351e63e3d118666ade46-7cff
            [PDF コンテンツのスクリプト作成]
            ブラウザ内の Web ページと同様に、JavaScript を使用して PDF コンテンツを制御することができます。
            Acrobat の JavaScript 拡張機能には、次のような機能があります。
            ページのナビゲーションおよび表示倍率の制御
            ドキュメント内のフォームの処理
            マルチメディアイベントの制御
            • 3. Re: htmlでのPDFページリンクについて(Mac ローカル)
              Level 1
              以下はWindowsでの話なので、Macでどうなるかは判りません。

              Acrobat Javascriptの「setPersistent」をつかうと、変数値を保存できます。
              これはAdobe Readerでも可能のようです。

              Adobe Acrobat : JavaScript
              永続的に値を保持する
              http://www.openspc2.org/reibun/Acrobat8/javascript/global/002/index.html

              保存されているファイルは拡張子「js」でテキストファイルなので、通常のJavascriptから読むことだけは可能ではないでしょうか?

              PDFオープン時にpageNumで現在のページ数を取得させ、setPersistentで変数値として書き込みます。
              やや時間間隔をおいて、ブラウザ上で表示されたURLの最後「#page=xx」の数字部分とPDFの現在ページを比較し、異なっていたら、Acrobat JavaScriptのページ移動メソッドで該当ページへと移動させる。

              ざっくりとしたアイデアですので、細かい検証等はしていません。
              • 4. Re: htmlでのPDFページリンクについて(Mac ローカル)
                Level 1
                radeonさん、ご回答ありがとうございます!

                > location.hrefに値を入れることで現在のURLを書き換える動作ではどうでしょう?
                > location.reload()で再読み込みさせるとどうでしょう?
                > WEBブラウザのキャッシュクリアとかは?

                やってみましたが、最初の記事と同様の事象でした。

                > Adobe AIR 1.5 * PDF コンテンツの追加

                Adobe AIR だと、ブラウザで動作させるのではなく、
                AIRアプリケーションとしてインストール型になると思います。
                取りあえず、AIRは保留とさせてください。

                > Adobe Acrobat : JavaScript

                拡張子「js」として外部ファイルに保存する場合、
                adobe reader のフォルダに直接入れないと動作しないと思います。
                個別にPDFに直接入れて動作は、これからやってみようと思います。

                最初の記事投稿後に色々試してみたのですが、mac では
                page= だけではなく、zoom等の他のパラメータも
                ローカルのみ動作していません。
                • 5. Re: htmlでのPDFページリンクについて(Mac ローカル)
                  Level 1
                  Windows XP の IE7 に直接PDFをドラッグし、下記の様な
                  URLにページ指定のパラメータを付けて表示させると表示しました。

                  Windows版のsafari3でも動きました。

                  file:///C:/○○○/hogehoge.pdf#page=3

                  mac の safari で上記と同様に.pdfの後に
                  #page=3を付けても動きません。

                  javascriptの問題ではなく、adobe readerの問題でしょうか?

                  adobe readerの環境設定も色々変更して動かしてみたのですが、
                  動きません。
                  • 6. Re: htmlでのPDFページリンクについて(Mac ローカル)
                    Level 1
                    いろんな所に投稿してしまうと、無駄に情報がダブってきませんか?<br /><br />http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view&no=2091<br />http://ziddy.japan.zdnet.com/qa4640249.html<br /><br />ところで「Parameters for Opening PDF Files」には以下の一文がありますね。<br /><br />When opening a PDF document from a command shell, you can pass the parameters to the open command using the /A switch with the following syntax:<br /><Acrobat path> /A "<parameter>=<value>" "<PDF path>"<br />For example:<br />Acrobat.exe /A "zoom=1000" "C:¥example.pdf"<br />In Mac OS, you can use the parameters when opening a PDF document with an Apple event.<br /><br />つまり、Windowsのコマンドプロントで「"zoom=1000"」を「"page=5"」にしても同様に機能するはずということです。実際、手許のWindows2000 SP4とAdobe Reader 9(AcroRd32.exe)の環境では問題なくページ指定が効いています。<br />MACのコマンドプロントレベルでも動作しないのであれば、MACでページ指定には期待しないほうがいいのではないでしょうか?<br /><br />古いサイトでの情報だと、「/A "page=4=OpenActions"」みたいにするように書いています。OpenActionsは現在では無くなったのでしょうか?<br /><br />やや古い情報ですが、Safariのiframeはバグがあったようです。現在どうなっているかは知りません。<br /><br />頭痛い:safariのiframeのバグ? <br />http://cast-a-spell.at.webry.info/200611/article_12.html<br />SafariのiFrame、リロードしても内容変わらず<br />http://karasu.net/blog/732<br /><br />OBJECTタグで埋め込む手法ではどうなんでしょう? ページ指定が動作するかは判りませんが。Embedタグでページ指定が動作するとしているサイトがあります。<br />OBJECTタグとEmbedタグの使い分けはやや難しい面があるのは困った点ですが。<br /><br />以下の古い情報では、EmbedタグとMac環境では最初のページしか表示しないとしています。<br /><br />[228600]Dreamweaver を使用して HTML ファイルに PDF ファイルを埋めこむにはhttp://support.adobe.co.jp/faq/faq/qadoc.sv?228600+002<br />「&lt; EMBED&gt; タグを使用して埋め込みを行った場合、Netscape 及び Macintosh 版 Internet Explorer 上では最初のページしか表示されません。」<br /><br />以下はSWFファイルでの問題ですが、Mac版Safari3の仕様を調べてみてはどうでしょう? Appleサイトに情報があるかと思います。<br /><br />Adobe - デベロッパーセンター : 将来を見据えた、新たなHTML内SWF埋め込み用コードの考察<br />http://www.adobe.com/jp/devnet/flash/articles/spark_project_swf_embed.html<br /><br />&gt; 拡張子「js」として外部ファイルに保存する場合<br />&gt; adobe reader のフォルダに直接入れないと動作しないと思います。<br />リンク先の説明や実際にやってみればわかりますが、最初からjsファイルを作成しておくのではありません。また保存先は各ユーザのアプリケーションデータ用フォルダになるはずです。DV Dなどのメディア内からの操作でどうなるかは知りません。ただし、最近のバージョンではメソッド実行が制限される場合があるので、アクセス許可を与えるように書き換えないといけないかもしれま せんが。<br /><br />Mac版SafariではURLの#以下が無視されているか、機能しないという可能性はありませんか? パラメータがSafari側に渡っていないような気がしますが?<br /><br />同じような環境下でもページ指定の手法はうまくいかないという投稿も時々ありますから、この機能を重視した作りには疑問です。<br />どうしてもページ指定でやるなら、それっぽくする方法はあります。<br /><br />PDF文書をすべて1ページずつに分解し、ファイル名を「sample_01.pdf」「sample_02.pdf」のようにページ数がわかるようにしてしまえば、15ページ目は「s ample_15.pdf」のようにダイレクトに通常のリンク指定でいいことになります。「次のページ」とか「前のページ」とかは現在ページから加減算したものをリンク先にしてしまえばいいか と。<br /><br />全てを満たすように努力するのはいいことでしょうが、時間と労力が無駄になっては意味はないでしょう。時には捨てるのも重要かと。<br />「Mac版SafariではPDF文書が開いたあとは、該当ページに移動して閲覧してください」とかのメッセージを出すような分岐処理をするとかしてもいいのでは?