Home/Support/

Forums

6 Replies Last post: Jan 21, 2009 4:15 PM by (radeon)  
User 3 posts since
Jan 17, 2009
Currently Being Moderated

Jan 17, 2009 5:36 PM

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

何卒、ご教授の程、宜しくお願い致します。
User 211 posts since
Aug 15, 2003
Currently Being Moderated
1. Jan 19, 2009 11:52 AM in response to: (mttan)
Re: htmlでのPDFページリンクについて(Mac ローカル)
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ブラウザのキャッシュクリアとかは?
User 211 posts since
Aug 15, 2003
Currently Being Moderated
2. Jan 19, 2009 5:22 PM in response to: (mttan)
Re: htmlでのPDFページリンクについて(Mac ローカル)
続けて推測です。

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

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

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

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

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

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

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

ざっくりとしたアイデアですので、細かい検証等はしていません。
User 211 posts since
Aug 15, 2003
Currently Being Moderated
6. Jan 21, 2009 4:15 PM in response to: (mttan)
Re: htmlでのPDFページリンクについて(Mac ローカル)
いろんな所に投稿してしまうと、無駄に情報がダブってきませんか?<br /><br />http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view&no=2091<b r />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_emb ed.html<br /><br />&gt; 拡張子「js」として外部ファイルに保存する場合<br />&gt; adobe reader のフォルダに直接入れないと動作しないと思います。<br />リンク先の説明や実際にやってみればわかりますが、最初からjsファイルを作成しておくのではありません。また保存先は各ユーザのアプリケーシ ョンデータ用フォルダになるはずです。DVDなどのメディア内からの操作でどうなるかは知りません。ただし、最近のバージョンではメソッド実行が制限 される場合があるので、アクセス許可を与えるように書き換えないといけないかもしれませんが。<br /><br />Mac版SafariではURLの#以下が無視されているか、機能しないという可能性はありませんか? パラメータがSafari側に渡っていないような気がしますが?<br /><br />同じような環境下でもページ指定の手法はうまくいかないという投稿も時々ありますから、この機能を重視した作りには疑問です。<br />どうしてもページ指定でやるなら、それっぽくする方法はあります。<br /><br />PDF文書をすべて1ページずつに分解し、ファイル名を「sample_01.pdf」「sample_02.pdf」のようにページ数がわか るようにしてしまえば、15ページ目は「sample_15.pdf」のようにダイレクトに通常のリンク指定でいいことになります。「次のページ」と か「前のページ」とかは現在ページから加減算したものをリンク先にしてしまえばいいかと。<br /><br />全てを満たすように努力するのはいいことでしょうが、時間と労力が無駄になっては意味はないでしょう。時には捨てるのも重要かと。<br />「Mac版SafariではPDF文書が開いたあとは、該当ページに移動して閲覧してください」とかのメッセージを出すような分岐処理をすると かしてもいいのでは?