• 締切済み

PDFJが動作しない

中島さんがフリーで配布されておられるPDFJを使ってPDFファイルの生成をしようとしています。(http://hp1.jonex.ne.jp/~nakajima.yasushi/) cgiでいろんな操作をしている中の1つとして、生成したxmlファイルからPDFファイルを作りたいので、次のようにツリー構成しました。 xxx(http://xxx.comのトップフォルダ) ├cgi/(705)┬aaa.cgi(705)         ├bbb.xml(606)         └lib/(705)┬PDFJ.pm(604)                ├XPDFJ.pm(604)                ├macro/(705)(はじめからセットされていた物すべて604で収納)                ├PDFJ/(705)(はじめからセットされていた物すべて604で収納)                └util/(705)(はじめからセットされていた物すべて604で収納) └data/(705) aaa.cgiで操作している中で、bbb.xmlを生成し、その後pdfファイルをdataフォルダに生成しようとしています。 bbb.xmlファイルは次のように記述し生成しています。 <?xml version="1.0" encoding="x-sjis-cp932"?> <XPDFJ version="0.2"> <do file="macro/stdders.inc"/> <do file="macro/toc.inc"/> <do file="macro/index.inc"/> <HXOUTLINE/> <BODY> ...中身... </BODY> <print file="$Args{outfile}"/> </XPDFJ> xmlファイルを作った後、aaa.cgi内で BEGIN { push @INC, 'フルパス/xxx/cgi/lib'; } use XPDFJ; $xpdfj = new XPDFJ; $xpdfj->parsefile($xmlfile, outfile => $outfile); #$outfileはaaa.cgiの冒頭で「$outfile = "../data/print.pdf";」と指定 として実行してみたのですが、Internal Server Errorとなり、当然ながらprint.pdfは生成されません。 perlチェックではエラーはありませんでしたし、BEGINの直前にxmlファイルを作っていますが、そこまではうまく機能しています。 説明を全部読みましたがうまくいきません。 ネットで使い方などを書いたサイトがないか探してみましたが、他の方が書いたサイトが全然見つかりませんでした。 上記のどこを修正すればいいのでしょうか、おわかりの方是非アドバイスください。 よろしくお願いします。

  • choei
  • お礼率63% (286/451)
  • Perl
  • 回答数2
  • ありがとう数3

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

サーバにログインできれば (適当な値を渡すことにより) Perl のスクリプトとして実行することはできるはずです. ログインの詳細については「サーバを運営しているところ」に聞いてください. あと, 「適当な値」がなんであるかは知りません. で, 後半の「do file でファイルが読み込めているかどうか」を確かめる方法も XPDFJ を使ったことがないので知りません. 「スクリプトのある位置からの相対指定」だったら "macro/なんとか" ではまずい気もするけど.

choei
質問者

お礼

再度の回答ありがとうございます。 相対指定についてはXPDFJ.pmからなのかaaa.cgiからなのか分らないので両方試してみましたがどちらでもエラーになってました。 質問してからも大分検証したり調べたりしたのですが、do fileが読み込めているかどうかすら調べる方法が分らないので、壁はかなり高いと思いますので、別の方法でPDFファイルを作成する方法を検討してみます。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

CGI として動かす前に, 単体のプログラムとしてきちんと動作することは確認されているのでしょうか? あとちょっと気になるのですが, do file でファイルは読み込めてますか?

choei
質問者

お礼

回答ありがとうございます。 >単体のプログラムとしてきちんと動作することは確認されているのでしょうか? すみません、どのように検証していいのか分りません。 perlチェックをかけてsyntax OKと出たら後はトライアンドエラーでいつもやってます。 >do file でファイルは読み込めてますか? xmlの記述はサイトマップを作るのにweb上で自動生成をしたのを改変する程度で、手書きをしたのが今回が初めてでdo fileが読めているのかどうやって確認すればいいのか分りません。

関連するQ&A

  • XMLの特定のデータを書き込むには?

    下記のXMLファイルを読み込んで、 タグYYYのキーでKEY2を検索し、 子要素AAAの値のData2を書き換えるという処理を 作ろうとしてるのですが、 なかなか解決策が見つかりません。 よろしくお願い致します。 例: abc.xml <XXX> <YYY KKK="KEY1"> <AAA>Data1</AAA> <BBB>Data2</BBB> <CCC>Data3</CCC> </YYY> <YYY KKK="KEY2"> <AAA>Data1</AAA> <BBB>Data2</BBB> <CCC>Data3</CCC> </YYY> <YYY KKK="KEY3"> <AAA>Data1</AAA> <BBB>Data2</BBB> <CCC>Data3</CCC> </YYY> </XXX>

  • ssi がうまく動作しません。

    サーバ会社に訪ねると.htaccessに AddType text/html shtml を記入して下さいとのことでした。 以下の方法でためしましたが、エラーがでるわけでもなく、<!--#INCLUDE VIRTUAL="/ssi/xxx.shtml"--> にした部分だけが表示されません。 http://aaa.com/bbb/ccc/ddd.html .htaccess は、bbbのファイル内におきました。 1, ssi/xxx.shtml は、indexと同じトップの階層におきました。 ddd.html に  <!!--#INCLUDE VIRTUAL="/ssi/xxx.shtml"--> を記入しました。 2, ssi/xxx.shtml は、bbbのファイル内において、ddd.html に <!--#INCLUDE FILE="/ssi/xxx.shtml"--> を記入してみましたが、これもだめでした。 パーミッションも何がいいのか、お分かりでしたらお願い致します。 ちなみに777にして試したのですが、だめでした。

    • ベストアンサー
    • CSS
  • sortコマンドのオプションなどの意味

    シェルスクリプトに次のようなsortコマンドが出てきました。 sort -t, /export/home1/aaa -u -k 1 -o $CSV_OUTFILE/$OUTPUT_FILE \     $CSV_OUTFILE/$INPUT_FILE_AAA $CSV_OUTFILE/$INPUT_FILE_BBB (aaaとAAAとBBBは変えていますが、あとはまったくもとのままです。) 行の最後の\は行継続の意味でよろしいでしょうか。 -t の直後に "," (カンマ) がありますが、これは「(空白区切りではなくて)カンマ区切り」という意味でよろしいですか。 (-tとカンマの間に空白は要らないのでしょうか。カンマはシングルクォーテーションで囲まなくてよいのでしょうか。) /export/home1/aaa というディレクトリの指定がありますが、これはなんのためでしょうか。 -u は同一行は重ねて出力しないという意味でよろしいでしょうか。 (キーが同じ行は重ねて出力しないという意味ではないですよね?) -k 1 の意味がわかりません。(ソートするキーの指定?) インプットファイルの指定と思われるものが2つありますが、入力ファイルは複数でも構わないのでしょうか? 以上ですが、わかるものだけでも結構です。 よろしくお願いします。

  • ファイルの作成日で動作するバッチ

    下記のような動作をするバッチを作成したいのですが どのように作ればよいのかわかりません。 ぜひ知見のある方にご教示いただければと思います。 環境はWindows Server 2008 R2です。 とあるフォルダ「A」があります。 「A」の下には「work」というフォルダと、ランダムな文字列のフォルダが生成されます。 ランダムな文字列のフォルダの下には「xxx.pdf」「xxx.csv」が生成されます。 (xxxにもランダムな文字列が入ります。フォルダとファイルの文字列は別です) 毎日1回バッチファイルを動作させ「A」の配下にあるランダムなフォルダの中にある「xxx.pdf」「xxx.csv」を 別のフォルダ「B」に移動させたいと思っています。 この際にランダムな文字列のフォルダは削除し、ファイルだけを移動させたいです。 また、移動させるファイルの条件として「xxx.pdf」「xxx.csv」のファイル生成日が 24時間以内であることとしたいです。 つまりファイル生成されてから24時間以上経過した「xxx.pdf」「xxx.csv」は処理の対象外になります。(「xxx.pdf」「xxx.csv」を格納しているフォルダもそのまま) また「work」フォルダおよび「work」フォルダ配下のファイルも処理の対象外としたいです。 知見のある方、ぜひご教示をお願いいたします。

  • 要素名を表示させたい

    <data>   <aaa xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </aaa>   <bbb xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </bbb>   <ccc xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </ccc> </data> 上のようなXMLから、XSLのvalue-ofなどを使って、 要素名aaa、bbb、cccを表示させるにはどう記述すればいいのでしょうか?

    • ベストアンサー
    • XML
  • perlなんですが、403エラーについて

    サーバーとperlはつい最近はじめた初心者です。 カテゴリーをどちらにしようか悩みましたが、いろいろを試した結果 こちらに質問することにしました。もしかしたらperlの設定かもしれません。もしも間違っていたら申し訳ございません。 サーバーの種類はCentOS Linux 5 バージョン 1.390です。 バーチャルドメインで3つのドメインを管理しています。 一応以下のように仮定させてもらいます。 AAA.com BBB.com CCC.com 末行に書いたテスト用(test.cgi)をBBB.comのディレクトリーに アップしたところ、403エラーになりました。 パーミッションエラーかなと思い、パーミッションの設定をすべて 行いましたが解決できませんでした。 実際にAAA.comでは普通に稼動しているはずなのに、おかしいな~と 思って、その同じスクリプトをBBB.comにアップしたところ、 きちんと表示されました。 そこで、AAA.comの設定をhttp.confからすべて外してBBB.comのtest.cgi を確認したところ、表示されました。 もしかしたら、複数のドメインでperlを使う場合には、 なにか設定を行う必要があるのでしょうか? バーチャルドメインで設定している内容は以下のとおりです。 ※勝手にリンクマークされるのでwww は xxx に置き換えました。 <VirtualHost ***.***.***.***> DocumentRoot /var/xxx/AAA-com ServerName AAA.com HostNameLookups off UseCanonicalName on ScriptAlias /cgi-bin/ /var/xxx/AAA-com/cgi-bin/ <Directory /var/xxx/AAA-com/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost ***.***.***.***> DocumentRoot /var/xxx/BBB-com ServerName AAA.com HostNameLookups off UseCanonicalName on ScriptAlias /cgi-bin/ /var/xxx/BBB-com/cgi-bin/ <Directory /var/xxx/BBB-com/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> </VirtualHost> テスト用のスクリプトは以下のとおりです。 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<html><head><title>CGI-Perl TEST</title>\n"; print "<meta http-equiv='content-type' content='text/html; charset=shift_jis'>\n"; print "</head><body><h2>CGI-Perlテスト</h2>\n"; print "</body></html>\n"; exit;

  • csv作成エラー

    CSVファイルを作ろうとcsvフォルダを作り、xmlファイル・xslファイルを入れました。 C:\csv\aaa.xml C:\csv\bbb.xsl コマンドプロンプトで C:\csv>java org..apache.xalan.xslt.Process -in aaa.xml -xsl bbb.xsl -out ddd.csv と入力したら、 file:/C:/csv/bbb.xsl;行番号1;列番号-1;XSLTエラー(javax..xml.transform.TransformerConfigurationException):javax..xml.transform.TransformerException: org.xml.sax.SAXParseException: ドキュメントのルート要素がありません。 と表示されてうまくいきません。 xslファイルの1行目には、<?xml version="1.0" encoding="utf-8"?>と記載されています。 教えていただけたらうれしいです。

    • ベストアンサー
    • XML
  • includeと#include

    他の人が書いた拡張子が.aspとなっている ファイルを眺めているのですが、その中に <!-- #include file="./Include/aaa.inc" --> <!-- include file="./Include/bbb.inc" --> という2種類の記述が存在していました。 前者は相対ディレクトリ指定でaaa.incというファイルを 読み込んで処理すると理解しておりますが 後者も同じ動作をするものなのでしょうか? 実行環境が手元にないため試すことも出来ず Net上を検索してもこれといったものが見つかりません。 どなたかご教授お願いします。

  • ファイル書込時にPermission denied

    QRコードを生成してファイルに保存するプログラムを作っています。 ファイルハンドルをオープン時にエラーがでます。 open OUTFILE, '>', 'C:\inetpub\wwwroot\test.jpg' or die "$!"; # ここでエラーがでます。 binmode OUTFILE; print OUTFILE $qrimg->plot->jpeg; close OUTFILE; エラーメッセージは 「指定された CGI アプリケーションは、正しく動作しませんでした。HTTP ヘッダーの完全なセットが返されませんでした。返されたヘッダーは "Permission denied at C:\inetpub\wwwroot\cgi-bin\qr.cgi line 24. " です。」 です。 環境は Windows 7 / IIS 7.5 / ActivePerl 5.14.2 です。

    • ベストアンサー
    • Perl
  • ファイルの作成日で動作するバッチ(その2)

    下記のような動作をするバッチを作成したいと思っております。 環境はWindows Server 2008 R2です。 とあるフォルダ「A」があります。 「A」の下には「work」というフォルダと、ランダムな文字列のフォルダが生成されます。 ランダムな文字列のフォルダの下には「xxx.pdf」「xxx.csv」が生成されます。 (xxxにもランダムな文字列が入ります。フォルダとファイルの文字列は別です) 毎日1回バッチファイルを動作させ「A」の配下にあるランダムなフォルダの中にある「xxx.pdf」「xxx.csv」を 別のフォルダ「B」に移動させたいと思っています。 この際にランダムな文字列のフォルダは削除し、ファイルだけを移動させたいです。 また、移動させるファイルの条件として「xxx.pdf」「xxx.csv」のファイル生成日が 24時間以内であることとしたいです。 つまりファイル生成されてから24時間以上経過した「xxx.pdf」「xxx.csv」は処理の対象外になります。(「xxx.pdf」「xxx.csv」を格納しているフォルダもそのまま) また「work」フォルダおよび「work」フォルダ配下のファイルも処理の対象外としたいです。 過去の質問で回答をいただけたのですが下記部分が動作をしておりません。 過去質問:http://okwave.jp/qa/q9185333.html 未動作:対象のファイルが格納されているランダムな文字列のフォルダは削除し、ファイルだけを移動させる。 上記バッチファイルから未動作部分の実装についてご教示いただけますでしょうか?

専門家に質問してみよう