PDFlibでエラー(permission denied)

このQ&Aのポイント
  • ASP+VBScript+PDFlibの環境でPDFを出力するアプリを開発中です。
  • PDF出力時に「Error: Couldn't open PDF file 'sample.pdf' for writing (permission denied)」というエラーが発生します。
  • 権限の問題が原因か、プログラム側の問題かを教えてください。
回答を見る
  • ベストアンサー

PDFlibでエラー(permission denied)

ASP初心者です。 IIS+ASP+VBScript+PDFlibの環境でPDFを出力するアプリを開発中です。 実行すると 「Error: Couldn't open PDF file 'sample.pdf' for writing  (permission denied)」 というエラーになります。 権限がないのが原因だと思うのですが、これは  ・プログラム側の問題  ・環境設定に抜けがある のどちらなのでしょうか? どなたかご存知の方がいらっしゃいましたらご教授下さい。 よろしくお願いします。 ちなみにプログラムは下記になります。 <%@ Language=VBScript %> <% Option Explicit const title = "証明書" dim msg Response.Write("株式会社○○") Dim font Dim oPDF Set oPDF = Server.CreateObject("PDFlib_com.PDF") oPDF.set_info "Creator", "sample.asp" oPDF.set_info "Author", "marumaru" oPDF.set_info "Title", "sample (COM/VBS)!" ' This means we must check return values of load_font() etc. oPDF.set_parameter "errorpolicy", "return" if (oPDF.begin_document("sample.pdf", "") = -1) then msg = "Error: " & oPDF.get_errmsg end if Set oPDF = Nothing %> <HTML> <HEAD> <TITLE><% = title %></TITLE> </HEAD> <BODY> </BODY> </HTML>

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

sample.pdfファイルを作成しようとして 書き込みエラーになっているみたいです。 作成するPDFファイルの保存場所を、「IUSER_[マシン名]」というユーザが 書き込み可能なディレクトリに保存してみてください。 (sample.pdfを作る場所をServer.MapPathを使って見るのも いいかもしれません。) oPDF.begin_document(Server.MapPath("/[書き込み権限のあるPATH]/sample.pdf"), "") よろしくお願いします。

madamadahiyoko
質問者

補足

kero_mioさん 回答どうもありがとうございます! 早速、教えていただいた通り「IUSER_[マシン名]」ユーザが書き込み 可能なディレクトリに保存して実行したところ、エラーは消えました。 正常に処理されるのですが、↑で作成したディレクトリにPDFファイル が作成されるだけで、画面には何も表示されません。 ディレクトリにファイルとして保存せずに、ブラウザ上にPDFファイル として表示することは出来ないのでしょうか。 何かご存知でしたら教えてください。 何度も申し訳ありませんが、よろしくお願いします。

その他の回答 (2)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.3

Response~となっているものは、ASP(サーバ側)のコードになります。 また、PDFlibの仕組みをよくわかっていないので、 大変恐縮ですが、恐らく、サーバ側で物理的にPDFファイルは 作られているはずなので、そのPDFファイルを 単純に表示させてあげれば良いのです。 それから、掲載したコードに間違いがあったので、 下記に訂正します。失礼しました。 ・Redirectでやる場合 Response.Redirect("/asp/hello.pdf") ・ContextTypeでやる場合 Response.ContentType = "application/pdf" Response.AddHeader "Content-Disposition", "attachment; filename=sample.pdf" Response.Flush() Response.End() サーバ上にPDFファイルが出来上がっていれば、 Response.Redirect だけでいけるはずなので、ご確認下さい。 また、JavaScriptでやった方が、都合がいい場合は、 このQAではなく、新規でQAを立ち上げて、質問して 頂けたらと思います。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

>ディレクトリにファイルとして保存せずに、 >ブラウザ上にPDFファイルとして表示することは出来ないのでしょうか。 とりあえず、権限を与えて問題なくてよかったです。 それで、上記ですが、できると思います。 こういうのは、どうでしょうか? Response.Redirect(Server.MapPath("sample.pdf")) もしくは、 Response.ContentType = "application/pdf" Response.AddHeader("Content-Disposition", "attachment; filename=sample.pdf") Response.Flush() Response.WriteFile("sample.pdf") Response.End() で、いけたらいいなという感じです。 もし、はずれていたら、ごめんなさい。

madamadahiyoko
質問者

補足

早速試してみましたが私のコーディングが悪いのか上手くいきません。 以下に実行した際に表示されたエラーを載せておきます。 エラーの原因と対処法を自分なりに調べています。もし、何か原因が おわかりでしたら教えていただけると助かります。 何度も申し訳ありません。 ちなみにこれはJavaScriptなのでしょうか? Response.Redirect(Server.MapPath("/asp/hello.pdf")) →サーバーが見つかりません。 Response.ContentType = "application/pdf" Response.AddHeader("Content-Disposition", "attachment; filename=hello.pdf") →Sub プロシージャを呼び出すときに、かっこを使うことはできません。 Response.AddHeader "Content-Disposition", "attachment; filename=hello.pdf" Response.Flush() Response.WriteFile("hello.pdf") →オブジェクトでサポートされていないプロパティまたはメソッドです。: 'Response.WriteFile' Response.WriteFile "hello.pdf" →オブジェクトでサポートされていないプロパティまたはメソッドです。: 'Response.WriteFile' Response.WriteFile Server.MapPath("/asp/hello.pdf") →オブジェクトでサポートされていないプロパティまたはメソッドです。: 'Response.WriteFile' Response.End()

関連するQ&A

  • oracleを利用できません。(global.asa利用)

    asp + oracle + oo4oをglobal.asaファイルを利用して プログラムを組むことになりまして、ネットでサンプルファイルを見つけまして 実行したところエラーになっていまいます。 サンプルは以下の通りです。 ----global.asa--- 'OO4O用の設定 <OBJECT RUNAT=Server SCOPE=Application ID=OraSession PROGID="OracleInProcServer.XOraSession"> </OBJECT> <SCRIPT LANGUAGE=VBScript RUNAT=Server> Sub Session_OnStart 'OO4O用の設定(Net*8を使用してOracle8に接続する) Set Session("OraDatabase") = OraSession.DbOpenDatabase("sun151_ora803", "scott/tiger", Clng(3)) Set Session("OraDynaset") = Session("OraDatabase").DbCreateDynaset("select * from emp order by empno", Clng(4)) End Sub Sub Session_OnEnd Set Session("OraDynaset") = Nothing Set Session("OraDatabase") = Nothing End Sub </SCRIPT> ---global.asaここまで--- ---emp_o1.asp--- <%@ LANGUAGE="VBSCRIPT" %> <HTML> <HEAD> <TITLE>emp_o1.asp</TITLE> </HEAD> <BODY> <% '変数の設定 Dim OraDatabase Dim OraDynaset Dim OraFields Dim fieldNum Dim recNum Set OraDatabase = Session("OraDatabase")   ↑ここでエラーがでます。(line17) Set OraDynaset = Session("OraDynaset") --以下略 ---emp_o1.aspここまで--- エラーとして エラー タイプ Microsoft VBScript 実行時エラー (0x800A01A8) オブジェクトがありません。: '[undefined]' /rhc/emp_o1.asp, line 17 というのが出てしまいます。 VBとoracleの経験はあるのですが、aspは今回初めてです。 しょうもない質問かもしれませんが、どなたかよろしく お願いいたします。

  • WMIスクリプトを使用してMACアドレスをASPで取得

    タイトルの通りですが、 WMIスクリプトを使用して、 ASPでMACアドレスの取得を行なっているのですが、 なかなか上手くいきません。 <%@ LANGUAGE="VBSCRIPT"%> <HTML> <HEAD> </HEAD> <BODY> <% Dim QfeSet Dim QfeSets Dim Qfe Dim Locator Dim Service Dim Ret on error resume next Set Locator = CreateObject("WbemScripting.SWbemLocator") Set Service = Locator.ConnectServer If Err = 0 then Set QfeSet = Service.Get("Win32_NetworkAdapterConfiguration") QfeSet.Security_.impersonationLevel = impersonate Set QfeSets = QfeSet.Instances_ End If For Each Qfe In QfeSet If Qfe.IPEnabled = True Then Ret = Qfe.MACAddress & vbCrLf Response.write("MACADDRESS:" & Ret & "<BR>") End If Next %> </BODY> </HTML> CreateObjectやService.Getのところが 原因ではないかと思うのですが・・・。 どなたか教えて戴けますでしょうか? 宜しくお願い致します。

  • C#で作成したdllをVBScriptで使うときのマーシャリングの問題

    お世話になります。 現在ClassicASPでWebアプリケーションを開発しているのですが、 その時にC#で作成したdllを使用したいと思い、 COM登録をしてASP側ではServer.CreateObjectで使用しようとしています。 しかし、データの受け渡し部分でずっとつまづいています。 やりたいことは、C#側の関数の戻り値で独自のクラス(構造体)の配列を戻したいのです。 以下サンプルコードです。 ASP側 <%@ Language=VBScript%> <% Response.ContentType = "text/html" Dim testObject set testObject = Server.CreateObject("TestObject") list = testObject.getList() Response.Write(TypeName(list)) ' ここで、[VBScript でサポートされていないオートメーションが変数で使用されています]エラー %> C#側 [StructLayout(LayoutKind.Sequential)] public struct TestData { [MarshalAs(UnmanagedType.BStr, SizeConst = 1024)] public String title; } public interface ITestObject { TestData[] getList(); } public class TestObject : ITestObject { public TestData[] getList() { TestData[2] result; result[0].title = "1"; result[1].title = "2"; return result; } } あとどういった処理が足りないのでしょうか? やりたいことは、構造体配列をASP側に渡したいだけです。 本当に困っています、なにとぞ宜しくお願い致します。

  • htaファイルでFor文

    htaファイルでFor文を用いて表(Tableタグ)を動的に出力する事は可能でしょうか。 例えば <html> <head> <title></title> </head> <body> <table> <script language="VBScript"> Dim i For i = 1 To 50 </script> <tr> <td>a</td> <td>a</td> <td>a</td></tr> <script language="VBScript"> Next </script> </table> </body> </html> 実際にサンプルを作成しましたがエラーが発生してしまいました。 もしかしてできないのでしょうか。 ご存知の方がいましたらアドバイスいただけませんでしょうか。 何卒、皆さんのお知恵を私にお貸しいただけたら幸いです。 どうか、宜しくお願いします。 では、失礼します。

  • エラー Permission denied

    現在、mingwで94個のプログラムをコンパイルするのにGNUMAKEを使っています。 make all で登録されたプログラムを全コンパイルすると、 その過程で133個のオブジェクトファイルが作られるのですが、途中で次のようなエラーが発生することがあります。 「することがある」というのが厄介な点で、ソースコードを一切変更せずに同じ操作をしても、 エラーが出るタイミングが違うのです。 まったくエラーの出ないこともありますが、たいがいは中盤で次のようなメッセージを出力して停止します。 gcc --input-charset=cp932 --exec-charset=cp932 -Wall -s -O3 -Os -c -o atgc_ratio.obj atgc_ratio.c gcc --input-charset=cp932 --exec-charset=cp932 -Wall -s -O3 -Os -c -o Lib-atgc_count.obj Lib-atgc_count.c gcc -Os -o atgc_ratio.exe atgc_ratio.obj Lib-klonoa.obj Lib-arg2.obj Lib-strdata.obj Lib-log.obj Lib-strdata2.obj Lib-atgcarryget2.obj Lib-atgc_count.obj Lib-file.obj Lib-calender.obj Lib-command.obj c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: reopening atgc_ratio.exe: Permission denied c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: final link failed: Permission denied collect2.exe: error: ld returned 1 exit status make: *** [atgc_ratio.exe] Error 1 上記の例ですと、atgc_ratio.exe をコンパイルしている最中に、「Permission denied」なるものが発生し、makeが動作停止しているものと解釈しております。 再度make all すると何事も無かったかのようにatgc_ratio.exeに必要なオブジェクトファイルをリンクして作業を続行します。 borland C++ compiler 5.5.1(古い!!)でも時たま同じようなエラーが発生するようですが、 そもそもこっちは12年前からバージョンアップしてないので、しょうがないかな?と思います。 一応、-Wall で無警告になるようメンテナンスはしているので、ソースコード自体の問題ではないと思います。 何らかのソフトがファイルをロックしているのかと思い、とりあえずアンチウィルスソフトを一時的に停止してみましたが、 やはりエラーは出ました。 マルチスレッドの問題?とも思ったのですが、マルチスレッドとかマルチコアなどの分野に手を出したことがありませんので見当がつかない状態です。 また最近シングルCPUのWinXP環境から Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz のWin7(32ビット)に移行したばかりで、 マルチCPUなどの使用経験も非常に浅いので、windowsの問題か、コンパイラの問題か、makeなど開発環境の問題か、原因の切り分けができておりません。 これらの問題の原因や対策について詳しい方、ご教授いただければと思います。 現在の環境を次にまとめます。 OS:Windows 7 Professional 32ビット版 (Serbice Pack1) 開発環境:mingw 4.7.2 (mingw-get-inst-20120426.exe を使って最新版をダウンロードしたもの)  コンパイラ:gcc 4.7.2  リンカ:GNU ld (GNU Binutils) 2.23.1  make:GNU Make 3.81 gcc -v の結果 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.7.2/lto-wrapper.exe Target: mingw32 Configured with: ../gcc-4.7.2/configure --enable-languages=c,c++,ada,fortran,obj c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgo mp --disable-win32-registry --enable-libstdcxx-debug --disable-build-poststage1- with-cxx --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw Thread model: win32 gcc version 4.7.2 (GCC) make -v の結果 GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i686-pc-msys オブジェクトのコンパイルには次のコマンドを使っています。 gcc --input-charset=cp932 --exec-charset=cp932 -Wall -s -O3 -Os -c -o リンクには次のコマンドを使っています。 gcc -Os -o なお、gccはデフォルトではオブジェクトファイルの拡張子を.oにしますが、 borland C++ も使う関係で、-oオプションでファイル名を直接指定して拡張子を統一しています。 どうかよろしくお願いします。

  • 仮想メモリ??このエラーはどう対処すればよいですか?

    ブログを書いていたら、”仮想メモリが少なくなっています”みたいなメッセージがでて、無視して続けていたら、 以下のようなメッセージが・・・・ ++++++++++ Microsoft VBScript compilation エラー '800a03e9' Out of memory /asp/500/500.asp, 行 169 .TextBody = sTemplate: ---------------------^ Microsoft VBScript compilation エラー '800a03e9' Out of memory /asp/people.inc.asp, 行 108 set oCmd_Article = CreateObject("ADODB.Command") -----------------------------------------------^ ++++++++++++ 再起動したところ、他のインターネットサイトは問題なく表示されるのですが、上記のえらーが出てしまったブログサイトが同じエラー表示がでて みることができません!!(泣) 対処法を教えてください!! 当方、素人なので出来るだけわかりやすく手順を教えていただけたらありがたいです。。 アドバイスよろしくお願い致します!!

  • Oracleとの接続について教えてください

     仕事ではじめてASPを作ることになったのですが、 Oracleとの接続がうまくできません。人から「これで接続できるはず」と言われたソースを使ったのですが、接続できませんでした。すみませんが、アドバイスをお願いします!! ******************* <HTML> <HEAD> </HEAD> <BODY> <% Dim cnnSample Dim rstSample Dim strConnectString Dim strSQL Set cnnSample = CreateObject("ADODB.Connection") strConnectString = "Provider=msdaora;User Id=***;Password=***;server=***;database=***;" cnnSample.Open strConnectString Set rstSample = CreateObject("ADODB.Recordset") strSQL = "SELECT * FROM SAMPLE" rstSample.Open strSQL, cnnSample, 3, 1, 1 %> <%Do Until rstSample.EOF%> <%=rstSample("NAME")%><BR> <%rstSample.MoveNext%> <%Loop%> <% rstSample.Close Set rstSample = Nothing cnnSample.Close Set cnnSample = Nothing %> </BODY> </HTML> **************** 以下、エラー画面 Microsoft OLE DB Provider for Oracle エラー '80004005' ORA-03121: インタフェース・ドライバが接続されていないため関数は実行されません。 /ado1.asp, 行 15 **************** すごくしょうもない間違いだったらすみません。

  • エラー この変数は宣言されていません'WScript'

    こんばんは。HTMLやjavascriptは初心者ですが、よろしくお願いします。まず、こちらをご覧ください。 <HTML> <HEAD> <TITLE>Menu</TITLE> <SCRIPT LANGUAGE="VBScript"> <!-- Option Explicit Public fso, indexPageTS, i Sub Start(ByRef i) Dim rootFolder, rootPath Set fso = CreateObject("Scripting.FileSystemObject") Set rootFolder = fso.GetParentFolderName(WScript.ScriptFullName) alert rootFolder.Name Set indexPageTS = fso.CreateTextFile(fso.BuildPath(rootFolder.Path, "index.html"), True) このように、<HEAD>にサブプロシージャを記述しております。少し中略します。<BODY>に以下のボタンを置きます。 <input type="button" name="InputBtn" onclick="Start(1)" value="リンクの更新"> これを押すとエラーになってしまいました。 IEでは「ページでエラーが発生しました」、htaEditというソフトで実行すると表題に掲げたエラーが出ました。6行目の、 Set rootFolder = fso.GetParentFolderName(WScript.ScriptFullName) のところをfso.GetFolderで手書きのパスを指定したらうまくいっていたので、'WScript'の使い方がいけないのかなとも思いましたが、VBSファイルにして実行すると問題ありませんでした。 htmlページのボタンではWScript.ScriptFullNameは使えないのでしょうか? IEのヴァージョンは少し古めで、5か6ですが、問題ありますでしょうか? よろしくお願いします。

    • ベストアンサー
    • HTML
  • ASPからWscriptを利用して外部ファイル起動時のエラー

    他の掲示板で投稿されていた質問ですが、同様の現象に はまっています。ご存知でしたらご教授ください。 以下、引用。 環境:Windows XP SP2 , IIS5.1 サンプルプログラム: 1.test.asp  (Wscript.Shell.Runで同じフォルダにあるバッチファイルを実行) ----------------------------------------- <%@Language=VBScript%> <% Option Explicit dim WshShell Set WshShell = Server.CreateObject("WScript.Shell") WshShell.Run "C:\wsh\test.bat" Set WshShell = Nothing %> aaaaa ----------------------------------------- 2.test.bat   (同じフォルダのテキストファイルに文字列を出力) ----------------------------------------- echo aaa > c:\wsh\testbat.txt ----------------------------------------- 現象: 実行したところ、以下のエラーが発生します。 ----------------------------------------- Microsoft VBScript 実行時エラー (0x800A0046) 書き込みできません。 /wsh/test.asp, line 6 ----------------------------------------- 試したこと: 1.バッチファイルを実行する箇所をなくしたASPを作成   ⇒ 正常に動きました 2.他の環境での確認   ⇒ Windows2000Server : 正常に動きました     後輩のXP SP2    : 同様のエラーが発生しました 3.仮想フォルダの匿名アクセスのチェックを外す   ⇒ 正常に動きました 4.IUSR_,IWAM_ユーザーにAdministrators、Users,Guests等の権限をふる   ⇒ 同様のエラーが発生しました 5.ASPファイルなどを格納しているフォルダにIUSR_、IWAM_を追加し   フルコントロールの権限を与える   ⇒ 同様のエラーが発生しました

  • ASPからVBScriptの実行

    ASPから下のVBScriptを実行使用とすると "500"Internal Server Error が出力されて困ってます。 へるぷみー Dim objWSHShell Set objWSHShell=WScript.CreateObject("WScript.Shell") objWSHShell.Run "cscript.exe d:\test.bat" objWSHShell=Nothing

専門家に質問してみよう