• 締切済み

DBからPDFを取得して別画面で表示したい

あるページにリンクが貼り付けてあります。 このリンクをクリックすると、 DB(SQL Server)からPDFファイルを取得し 別画面で表示するようにしたいと思っています。 ソースは下記のように書きました。 画面側(XXX.asp) <a href="../common/AAAAA.asp" target="_blank"><img src="images/banner.jpg" border="0" /></a> 呼び出され側(AAAAA.asp) Dim st Dim imgdata Dim rs Dim strSQL Dim column strSQL = "SELECT ファイル " strSQL = strSQL & "FROM 画像 " strSQL = strSQL & "WHERE ファイル名 = 'ファイル名' " 'レコードセット Set rs = querySql( conn, strSQL )     imgdata = rs.fields("ファイル").value Response.ContentType = "application/pdf" Call Response.AddHeader("Content-Transfer-Encoding", "binary") Call Response.AddHeader("Cache-Control", "no-cache") Call Response.AddHeader("Pragma", "no-cache") Call Response.BinaryWrite(imgdata) このようにすると画面には表示されるのですが IE7で表示したときのタブの部分は どうやったら指定できるのでしょうか? 「PDFファイル」と表示させたいです。 よろしくお願いします。

みんなの回答

noname#158371
noname#158371
回答No.1

新規ウィンドウではなく、新しいタブで上記ASPを実行したい場合、 どうすれば良いか?って質問ですか? もし、そうであれば、できない というのが回答になります。 「新しいタブで開く」のかは、あくまでそのサイトを見ている閲覧者の判断に委ねられているため、ASPやHTMLで制御することはできません。 そのため、IE7の新しいタブを制御してはいけないというのが正論です。 <a href="../common/AAAAA.asp" target="_blank"> のように新規ウィンドウで起動するものは閲覧者の判断なくできるのに・・・という意見もおありでしょうが、基本は、新しいウィンドウを作成しなくても良いようなWebアプリケーションをASPで作成するのが本来のあるべき姿です。 W3CのWCAG(ウェブコンテンツアクセシビリティガイドライン)でも http://www.zspc.com/documents/wcag10/ 「新しいウインドウをターゲットとするようなフレームを使用しないようにしてください。」と記載してある通り、新しいウィンドウを開くことをユーザに周知しない限り、プログラム作成者の意図で新規ウィンドウを立ち上げるべきではないということが言えるかと思います。 新しいウィンドウや新しいタブを立ち上げてPDF表示するプログラムをASPで作ることに否定はしませんが、そもそもの考え方/設計思想が間違っていますので、もう一度、その辺りはご検討いただきたいと思います。 (PDFファイルを生成した後、リダイレクトしてダウンロードさせる方が設計理論としては正しいです)

参考URL:
http://www.zspc.com/documents/wcag10/
taku_pon
質問者

お礼

次回からは「リダイレクトしてダウンロードさせる」で設計したいとおもいます。

関連するQ&A

  • フレーム内容が表示されない

    下記のようなページを読み込んだときに、フレームの内容が表示されません。ログを見ると、index.aspのみが読み込まれており、フレーム内のファイルが読み込まれていません。試しに全てをhtmlファイルにして読み込んでもNGでした。フレームをなくしてみるとindex.aspの内容は表示されます。ue.asp、sita.aspのファイルを内容はそのままで新規ファイルに置き換えてみると、たまに表示されます。表示・非表示の場合の規則性はありません。2つのファイルは、共に「うえ」「した」とbodyにテキスト表示しているだけです。 もしかすると、フレームタグ内の単純な書きミスなのかもしれないのですが、リファレンスと比べても違う箇所が分りません。ご教授お願いします。 作成は、VisualStudio6.0。表示検証は、IE6です。 <index.asp> <HTML> <HEAD> <% Response.AddHeader "Pragma", "no-cache" Response.AddHeader "Cache-control", "no-cache" %> <META HTTP-EQUIV="Content-Type" Content="text/html; charset=x-sjis"> <TITLE>new</TITLE> </HEAD> <body> <frameset rows="60,*"> <frame src="ue.asp" name="title" frameborder="0"> <frame src="sita.asp" name="body" frameborder="0"> </frameset> </BODY> </HTML>

  • キャッシュを無効に

    ブラウザの「戻る」ボタンを無効にしようとして、ソースの最初に With Response .Addheader "Pragma", "no-cache" .AddHeader "Cache-control", "no-cache" .Expires=0 .CacheControl="Private" End With と入れているのですが、「戻る」が効いてしまいます。 原因として、プロキシのキャッシュを読んでいるのではないかと思うのですが、プロキシのキャッシュを読みに行かないようにする方法はありませんか? 事情により、プロキシを使わないという選択肢は×です。また、プロキシそのものをいじってキャッシュを無効にするという手も使えません。 なんとかASPでそういう仕組みは使えないでしょうか。

  • CSV出力後に画面を変える方法

    親画面から子画面を表示させ、その子画面から、 CSVダウンロードをさせています。ダウンロードが終わった時点で 親画面を別のASP画面に変更したいのですが、 どうすればよいか教えてください。お願いいたします。 <CSV出力部分> Response.ContentType = "text/csv" Response.AddHeader "Content-Disposition","attachment;filename=" & szCsvNm Response.Write szCSV Response.End

  • ASP:動的に作成したPDFをアシュクしてダウンロード後の展開

    ASP(VB)にて動的に作成したPDF(stream)をZIPへ格納後、ダウンロードのプログラムを組んだのですが、ZIPの中を展開するとPDFが 「ファイルの種類がサポートされていないか、または破損している可能性があります。例えば電子文書として送信され、正しくデコードされなかったことなどが考えられます。」 と表示されて開けません。 バイト数・圧縮率は正しく表示されているのですが何かソースとしてエンコード/デコード方法が足りてないのでしょうか? ご教授お願いします。 以下ソースです。( Ionic.Zip.dll使用) Dim teststream As Stream Dim streamRE As StreamReader = New StreamReader("C:\test2.txt") teststream = streamRE.BaseStream Response.Clear() Response.ContentType = "application/zip" Response.AddHeader("content-disposition", "filename=data.zip") Dim zip As Ionic.Zip.ZipFile = New Ionic.Zip.ZipFile(Encoding.GetEncoding("shift_jis")) Using (zip) zip.AddEntry("データ1.pdf", "", teststream) 'ダウンロード出力 zip.Save(Response.OutputStream) End Using

  • PDF表示の動的切り替えについて

    こんなことできますか? 画面上で設定されている項目によりクライアントスクリプトでPDF作成用のパラメータを作成し、サーバに流します。 サーバサイドでクライアントから流れてきたパラメータを元に、PDFのイメージを作成し、ファイルを作成せずResponse.Writeを用いてクライアント側にデータを流します。 流れてきたデータを、画面上のPDFの表示と入れ替えたいのですが、方法はあるでしょうか? サーバ側でファイルに落とし、それを切り替える方法は、以前Literalを使用すればどうかというアドバイスをいただいたのですが、今回はファイルを介さないで、という事を教えてほしいのです。 現在はPDFの表示には<Object>や<iframe>を使用して試していましたが、知識不足のため、実現できるのにうまくいかないのか、そもそもできない事なのかがわからずにいます。 開発実行環境は Visual Studio 2010 ASP.net, c# IE8 となります。 ご存知の方、アドバイス願います。

  • ASP(VB)にて動的に作成したPDF(stream)をZIPへ格納後の展開ができない

    ASP(VB)にて動的に作成したPDF(stream)をZIPへ格納後、ダウンロードのプログラムを組んだのですが、ダウンロード後にZIPの中を展開するとPDFが 「ファイルの種類がサポートされていないか、または破損している可能性があります。例えば電子文書として送信され、正しくデコードされなかったことなどが考えられます。」 と表示されて開けません。 バイト数・圧縮率は正しく表示されているのですが何かソースとしてエンコード/デコード方法が足りてないのでしょうか? ご教授お願いします。 以下ソースです。( Ionic.Zip.dll使用) Dim teststream As Stream Dim streamRE As StreamReader = New StreamReader(\"C:\\test2.txt\") teststream = streamRE.BaseStream Response.Clear() Response.ContentType = \"application/zip\" Response.AddHeader(\"content-disposition\", \"filename=data.zip\") Dim zip As Ionic.Zip.ZipFile = New Ionic.Zip.ZipFile(Encoding.GetEncoding(\"shift_jis\")) Using (zip) zip.AddEntry(\"データ1.pdf\", \"\", teststream) \'ダウンロード出力 zip.Save(Response.OutputStream) End Using

  • Firefoxのpdf表示でこのpdfファイルはどこにキャッシュされているか?

    firefox v.3.0.6を使用しています. Firefoxでpdfファイルを表示させた場合,このpdfファイルはどこにキャッシュされているのでしょうか?ファイル名で検索してみたのですが見あたりませんでした. コンピュータ上で表示させているので,一旦どこかにキャッシュされているはずとは思うのですが,どこかが分かりません. CacheViewerを入れてみたのですが,pdfファイルは見あたりませんでした. 以上,よろしくお願い致します.

  • Yes/Noフラグの値をコピーできない

    すいません。ACCESS2003 VBAで下記の問題で困っています。 新たに作成したmdbファイル(テーブルの中身は空)に既存のmdbファイルのテーブル内容をコピーしたいのですが、Yes/Noフラグ型だけ移行できません。一応サンプルのソースです↓ Dim db As DAO.Database Dim RS As DAO.Recordset Dim strsql As String コピー元のmdbファイルをオープン Set db = OpenDatabase("コピー元mdb") 'SQLの生成 strsql = "" strsql = strsql & " SELECT * FROM テーブル名" 'レコードセット生成 Set RS = db.OpenRecordset(strsql, dbOpenSnapshot, dbReadOnly) 'コピー元テーブルにデータがあるか判定 If RS.RecordCount = 0 Then msgbox "データがありません" Else RS.MoveFirst 'コピー先のデータベースを設定 Set db = OpenDatabase("コピー先mdb") 'レコードの初期化 db.Execute (DELETE FROM コピー先テーブル名) Do While RS.EOF = False strsql = "" strsql = strsql & " INSERT INTO コピー先テーブル名(" strsql = strsql & " ,コピー先のYes/Noフラグ値" ' strsql = strsql & ")VALUES(" strsql = strsql & " ,'"コピー元のYes/Noフラグ値 "' " strsql = strsql & ")" db.Execute (strsql) RS.MoveNext Loop End If RS.Close db.Close

  • 【BASP21+ASP】MDEファイルがDL出来なくなった

    いつもお世話になっております。 IIS+VBSで、サーバーに上げたファイルを各自の端末でダウンロード出来る ページを作成しています。 例えば、クライアントで <a href="download.asp?FILE=見積書.xls">見積書</a> をクリックすると、download.aspに変数FILE(見積書.xls)が 渡され、download.asp側でtoolsフォルダ配下の見積書.xlsを ダウンロードする準備を行う、といった具合です。 これまで順調に動いていたのですが、ここ2,3日で急に AccessのMDEファイルがダウンロード出来なくなってしまいました。 本来ならダウンロード確認画面に「XXX.mde」と表示されるはずが、 「download.asp?FILE=XXX_mde」と書き換えられたかのように表示され、 保存しようとしてもエラーになります。 開く を選択するとASPのエラーが表示されるのですが、 BASP21のobjBasp.BinaryReadメソッドのところで「特定できないエラー」が 表示されています。 今までMDEファイルもダウンロード出来ましたし、家で同じ環境を構築しても 上手くいったのですが、会社の環境だけこのような事態になっています。 どなたかこの解決方法をご教授願えませんでしょうか? よろしくお願い致します。 (会社、自宅とも、WinXP+IIS6です) ---------------download.asp のソース-------------- Dim dat Dim objBasp Dim fname Dim bydata fname = Request.QueryString("FILE") Response.ContentType = "application/octet-stream;name=" & fname Response.AddHeader "Content-Disposition","attachment;filename=" & fname Set objBasp = Server.CreateObject("Basp21") bydata = objBasp.BinaryRead(Server.MapPath("tools/" & fname)) Response.AddHeader "Content-Length", ubound(bydata) + 1 Response.BinaryWrite bydata Set objBasp = Nothing -------------------------------------------------------

  • Access VBA フォームに表示したい

    Access2000で、帳票フォームにSQLの値を表示させたいのですが、 以下のコードだとフォーム上に最後のレコードしか表示されません。 取得したデータを正しく表示するにはどうしたらよいでしょうか。 ・フォームのtext1のコントロールソースにfld1と書く 以外の方法でできますか? できればすべて非連結で、作成したいです。 (本当はフォームのrecordsourceも設定したくないのですが それは無理でしょうか?) よろしくお願いいたします。 Private Sub Form_Load() Dim conn As Connection Dim rs As ADODB.Recordset Dim strSql As String Set conn = CurrentProject.Connection Set rs = New ADODB.Recordset strSql = "select * from table1" rs.Open strSql, conn, adOpenKeyset, adLockOptimistic, adCmdText Me.RecordSource = strSql rs.MoveFirst Do Until rs.EOF me!text1 = rs!fld1 rs.MoveNext Loop rs.Close Set rs = Nothing conn.Close Set connn = Nothing End Sub

専門家に質問してみよう