dポイントプレゼントキャンペーン実施中!

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>

A 回答 (3件)

sample.pdfファイルを作成しようとして


書き込みエラーになっているみたいです。

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

oPDF.begin_document(Server.MapPath("/[書き込み権限のあるPATH]/sample.pdf"), "")

よろしくお願いします。

この回答への補足

kero_mioさん

回答どうもありがとうございます!
早速、教えていただいた通り「IUSER_[マシン名]」ユーザが書き込み
可能なディレクトリに保存して実行したところ、エラーは消えました。

正常に処理されるのですが、↑で作成したディレクトリにPDFファイル
が作成されるだけで、画面には何も表示されません。

ディレクトリにファイルとして保存せずに、ブラウザ上にPDFファイル
として表示することは出来ないのでしょうか。
何かご存知でしたら教えてください。

何度も申し訳ありませんが、よろしくお願いします。

補足日時:2007/07/17 16:49
    • good
    • 0

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を立ち上げて、質問して
頂けたらと思います。
    • good
    • 0

>ディレクトリにファイルとして保存せずに、


>ブラウザ上に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()

で、いけたらいいなという感じです。
もし、はずれていたら、ごめんなさい。

この回答への補足

早速試してみましたが私のコーディングが悪いのか上手くいきません。
以下に実行した際に表示されたエラーを載せておきます。
エラーの原因と対処法を自分なりに調べています。もし、何か原因が
おわかりでしたら教えていただけると助かります。
何度も申し訳ありません。

ちなみにこれは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()

補足日時:2007/07/17 19:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!