記事タイトル:サーバとの通信 |
>3.クライアント側では2.の情報をローカルファイル(FDF?)として保存する ローカルにFDFを保存することは、可能だとは思いますが、クライアントはすべて Acrobat製品版を持っているのですか? Acrobat Reader もしくは Adobe Readerでは、FDFを手元にあるPDFに差し込むことは 不可能では・・。 ReaderはFDFを送信する機能があるだけ。 6.0では、どうなのか知りませんが。 >4.保存したファイルからの情報(名前等)をPDFのフォームに代入する Acroba製品版の機能。 以上から、サーバ側でテンプレートPDFにFDFをセットしてクライアントに返す ことしか出来ないような気がします。 >(そのまま”1 0 obj・・・”と表示されてしまう) これはFDFではありませんか? 末尾に%%EOFが付いていませんか? 拡張子にfdfを付けフィールド名が一致していたらPDFで表示できます。 Fキーの指定は必要(PDFファイルの指定)[2004年1月19日 21時19分9秒]
大西様 いつも回答ありがとうございます。 PDFlibを諦めたというよりは1/16に書いた記事のような仕様に変更した為です。 (私自身が仕様を決めている訳ではありません。念の為) 1.クライアント側からIDとパスワードを送信 2.サーバ側で認証してIDとパスワードから名前(またはエラー)を返す 3.クライアント側では2.の情報をローカルファイル(FDF?)として保存する 4.保存したファイルからの情報(名前等)をPDFのフォームに代入する この仕様であればPDFlibは必要無いのではと判断した為です。 現状では上記の仕様で実現可能か?という検証段階なので、 実現不可能であれば仕方が無いといった感じです。 PHPからFDFを吐き出そうとしても単純にテキストとして表示してしまい、 (そのまま”1 0 obj・・・”と表示されてしまう) 悪戦苦闘しています。 アドバイス等あれば宜しくお願い致します。[2004年1月19日 13時48分45秒]
PDFlibの使用をあきらめてしまわれたのは残念です。 phpでPDFlibを使うのは定番です。 商用でない限り、無粋なPDFlib comの文字が全面に現れますが 試用には差し支えないはずです。 FDFに関する理解の機会を永遠に失ってしまうことは、残念でなりません。 より困難な、javaへの道を歩まれるのでしょうか。 PDF生成の道はかならずしもeasy wayではありません。 FDFの構造、生成の方法について、理解を深めることが先決です。[2004年1月17日 19時49分22秒]
メールでの回答ありがとうございました。 結局PDFLIBは検討した結果(金銭的な問題含む)使用しない方向で 進めることになりました(汗 代案として考えているのが以下の処理です。 (以前にも書きましたが)、 1.クライアント側からIDとパスワードを送信 2.サーバ側で認証してIDとパスワードから名前(またはエラー)を返す 3.クライアント側では2.の情報をローカルファイル(FDF?)として保存する 4.保存したファイルからの情報(名前等)をPDFのフォームに代入する ※2.の認証に失敗した場合はファイルを閉じる という処理にする予定です。 ここでやはり問題なのは2.3.となります。 例えば”A.PDF”というファイルがあったとしてそこからフォーム送信し、 サーバ側での認証の成否をクライアント側であるA.PDFに返す (またはB.PDFを作成してB.PDFからA.PDFに渡す)ということは可能なのでしょうか? 度々申し訳ありませんが、宜しくお願い致します。[2004年1月16日 18時41分44秒]
長文がうまくアップできないようです。 メールアドレスを kawa-01@muh.biglobe.ne.jp あてに、スクリプト希望と表題をつけて送ってください。[2004年1月14日 20時17分34秒]
<%@ LANGUAGE = VBScript %> <% 'CALC.vbs.asp --- PDFlib --- CALC.htm 'Option Explicit Dim form, page, font Dim oPDF Dim InFileMapped Dim lWidth, lHeight Dim col1, col2 Dim buf col1= 70 col2= 400 '*** フィールド値取得 *** field_0 = Request.Form("field_0") field_1 = Request.Form("field_1") field_2 = Request.Form("field_2") sedai = Request.Form("sedai") field_3 = field_1*field_2 '*** 文字列位置調整 *** STR1 = CStr(field_1) EMPT = "" KETA = 9 MOJI = LEN(field_1) FOR i =0 TO (KETA-MOJI)-1 EMPT = EMPT + " " NEXT field_1k = EMPT + STR1 STR2 = CStr(field_2) EMPT = "" KETA = 9 MOJI = LEN(field_2) FOR i =0 TO (KETA-MOJI)-1 EMPT = EMPT + " " NEXT field_2k = EMPT + STR2 STR3 = CStr(field_3) EMPT = "" KETA = 9 MOJI = LEN(field_3) FOR i =0 TO (KETA-MOJI)-1 EMPT = EMPT + " " NEXT field_3k = EMPT + STR3[2004年1月14日 20時12分52秒]
あまりに長いと掲示板は中身を飛ばしてしまうようなので、分けてアップします。 <%@ LANGUAGE = VBScript %> <% 'CALC.vbs.asp --- PDFlib --- CALC.htm 'Option Explicit Dim form, page, font Dim oPDF Dim InFileMapped Dim lWidth, lHeight Dim col1, col2 Dim buf col1= 70 col2= 400 '*** フィールド値取得 *** field_0 = Request.Form("field_0") field_1 = Request.Form("field_1") field_2 = Request.Form("field_2") sedai = Request.Form("sedai") field_3 = field_1*field_2 '*** 文字列位置調整 *** STR1 = CStr(field_1) EMPT = "" KETA = 9 MOJI = LEN(field_1) FOR i =0 TO (KETA-MOJI)-1 EMPT = EMPT + " " NEXT field_1k = EMPT + STR1 STR2 = CStr(field_2) EMPT = "" KETA = 9 MOJI = LEN(field_2) FOR i =0 TO (KETA-MOJI)-1 EMPT = EMPT + " " NEXT field_2k = EMPT + STR2 STR3 = CStr(field_3) EMPT = "" KETA = 9 MOJI = LEN(field_3) FOR i =0 TO (KETA-MOJI)-1 EMPT = EMPT + " " NEXT field_3k = EMPT + STR3[2004年1月14日 20時11分11秒]
<%@ LANGUAGE = VBScript %> <% 'CALC.vbs.asp --- PDFlib --- CALC.htm 'Option Explicit Dim form, page, font Dim oPDF Dim InFileMapped Dim lWidth, lHeight Dim col1, col2 Dim buf col1= 70 col2= 400 '*** フィールド値取得 *** field_0 = Request.Form("field_0") field_1 = Request.Form("field_1") field_2 = Request.Form("field_2") sedai = Request.Form("sedai") field_3 = field_1*field_2 '*** 文字列位置調整 *** STR1 = CStr(field_1) EMPT = "" KETA = 9 MOJI = LEN(field_1) FOR i =0 TO (KETA-MOJI)-1 EMPT = EMPT + " " NEXT field_1k = EMPT + STR1 STR2 = CStr(field_2) EMPT = "" KETA = 9 MOJI = LEN(field_2) FOR i =0 TO (KETA-MOJI)-1 EMPT = EMPT + " " NEXT field_2k = EMPT + STR2 STR3 = CStr(field_3) EMPT = "" KETA = 9 MOJI = LEN(field_3) FOR i =0 TO (KETA-MOJI)-1 EMPT = EMPT + " " NEXT field_3k = EMPT + STR3 Set oPDF = Server.CreateObject("PDFlib_com.PDF") ' Open new PDF file oPDF.open_file "" oPDF.set_info "Creator", "CALC.vbs.asp" oPDF.set_info "Author", "Toshio Onishi" oPDF.set_info "Title", "Try! HTML TO PDF Generation!" '*** Transition *** oPDF.set_parameter "transition","wipe" InFileMapped = Server.MapPath("template.pdf") form = oPDF.open_pdi(InFileMapped, "", 0) if (form = -1) then Response.write "Couldn't open input file!" Response.end end if page = oPDF.open_pdi_page(form, 1, "") if (page = -1) then Response.write "Couldn't open page 1 in input file!" Response.end end if 'font = oPDF.findfont("Helvetica-Bold", "winansi", 0) font = oPDF.findfont("HeiseiKakuGo-W5", "90ms-RKSJ-H", 0) form = oPDF.open_pdi(InFileMapped, "", 0) if (form = -1) then Response.write "Couldn't open input file!" Response.end end if page = oPDF.open_pdi_page(form, 1, "") if (page = -1) then Response.write "Couldn't open page 1 in input file!" Response.end end if 'font = oPDF.findfont("Helvetica-Bold", "winansi", 0) font = oPDF.findfont("HeiseiKakuGo-W5", "90ms-RKSJ-H", 0) 'oPDF.setcolor "both", "rgb", 0, 0, 1, 0 ' get the dimensions of the imported form lWidth = oPDF.get_pdi_value("width", form, page, 0) lHeight = oPDF.get_pdi_value("height", form, page, 0) ' start a new page oPDF.begin_page lWidth, lHeight oPDF.place_pdi_page page, 0, 0, 1, 1 oPDF.close_pdi_page page oPDF.setfont font, 18 oPDF.set_value "leading", 24 oPDF.set_text_pos col1,750 '*** 文字列表示 *** oPDF.show "こんにちは!" oPDF.continue_text field_0 oPDF.show "さん! アクセスありがとうございます。" oPDF.continue_text "PDFlibで日本語表示も簡単にできます。" oPDF.setcolor "both", "rgb", 0, 1, 0, 0 oPDF.continue_text "計算結果は以下のとおりです。" oPDF.setcolor "both", "rgb", 0, 0, 0, 0 oPDF.continue_text "" oPDF.continue_text "field_1" oPDF.continue_text "field_2" oPDF.continue_text "乗算の結果" oPDF.continue_text "" oPDF.setcolor "both", "rgb", 1, 0, 0, 0 oPDF.continue_text "下の画像は、動的に貼り付けたJPEG画像です。" oPDF.continue_text "" oPDF.setcolor "both", "rgb", 0, 0, 0, 0 oPDF.continue_text "1.20才代" oPDF.continue_text "2.30才代" oPDF.continue_text "3.40才代" 'oPDF.save 'oPDF.restore 'font = oPDF.findfont("Helvetica", "winansi", 0) 'oPDF.setfont font, 18 oPDF.set_text_pos 230, 655 oPDF.setcolor "both", "rgb", 0, 0, 0, 0 oPDF.continue_text field_1k oPDF.continue_text field_2k 'oPDF.continue_text "Calculation result;" oPDF.continue_text field_3k oPDF.continue_text "" oPDF.save oPDF.restore font = oPDF.findfont("Helvetica-Bold", "winansi", 0) oPDF.setcolor "both", "rgb", 0, 0, 1, 0 oPDF.setfont font, 18 oPDF.set_text_pos 500, 50 oPDF.continue_text DATE font = oPDF.findfont("HeiseiMin-W3", "90ms-RKSJ-H", 0) oPDF.setcolor "both", "rgb", 0, 0, 1, 0 oPDF.setfont font, 20 oPDF.set_text_pos 100, 65 oPDF.show "文字列の大きさ、位置もコントロールできます。" '*** ?{?b?N?X?\?| *** 'Text = "show_boxed not supported CID font(Japanese font) " 'fontsize = 16 'font = oPDF.findfont("Helvetica-Bold", "winansi", 0) 'oPDF.setfont font, fontsize x = 60 y = 572 w = 335 h = 85 c = oPDF.show_boxed("", x, y, w, h, "justify", "") 'If (c > 0) Then 'Not all characters could be placed in the box; act appropriately here... 'End If oPDF.rect x, y, w, h oPDF.stroke '*** CIRCLE ?\?| *** If sedai="1" Then oPDF.circle 74,493,10 oPDF.stroke End If If sedai="2" Then oPDF.circle 74,469,10 oPDF.stroke End If If sedai="3" Then oPDF.circle 74,445,10 oPDF.stroke End If ImageFileMapped = Server.MapPath("tubame.jpg") lImage = oPDF.open_image_file("jpeg", ImageFileMapped, "", 0) if lImage = -1 Then Response.write "Couldn't open image file '" & ImageFileMapped & "'!" Response.end End If ' We generate a page with the image's dimensions lWidth = oPDF.get_value("imagewidth", lImage) lHeight = oPDF.get_value("imageheight", lImage) ' start a new page 'oPDF.begin_page lWidth, lHeight ' Place the image in the lower left corner oPDF.place_image lImage, 50, 100, 0.75 oPDF.close_image lImage oPDF.end_page oPDF.close buf = oPDF.get_buffer() Response.Expires = 0 Response.Buffer = true Response.ContentType = "application/pdf" Response.Addheader "Content-Disposition", "inline; filename=" & "CALC.vbs.asp.pdf" Response.Addheader "Content-Length", LenB(buf) Response.BinaryWrite(buf) Response.End() Set oPF = nothing %>[2004年1月14日 20時7分1秒]
早速の回答ありがとうございます。 お蔭様でパラメータの送信はPHPで受け取れるようになりました。 今度はPHP側(サーバ)からPDF側(クライアント)に データ(具体的には名前や日付)を返したいのですが、 どのような書式で書けばよろしいのでしょうか? PHPではなくても構いませんのでサンプル等ありましたらありがたいです。 以上宜しくお願い致します。[2004年1月14日 11時29分26秒]
既存のsubmitform() のサンプルは以下のようなものがあります。 var email=this.getField("email").value; var name=this.getField("name").value; var version=this.getField("version").value; var product=this.getField("product").value; var date=this.getField("date").value; var fields=new Array(4); fields[0]="email"; fields[1]="name"; fields[2]="version"; fields[3]="product"; fields[4]="date"; if(!email || !name || !version || !product) {app.alert("このページの項目に入力もれがあります。すべての項目に入力してください。");} else {submitForm("http://pdf.sytes.net/souzoku/write.asp#FDF",false,false,fields); app.alert("送信完了!ご注文ありがとうございました。のちほど、振り込み口座名をメールでお送りします。");} 上記のwrite.aspをphpの指定のスクリプトに変えて指定してやれば、動作すると思いますが・・。 どんなスクリプトを使用するにしても、必ず #FDF は付けて下さい。 phpにHTMLのフォームから送信された値を受け取るスクリプトはありませんか? これがわからないと、どうにも前に進みません。 phpは知らないので、お調べください。[2004年1月13日 20時38分3秒]
回答ありがとうございます。 難しそうなので一つずつ問題を解決していこうと思います。 まずはsubmitFormについてですが、これによりデータを受け取ったサーバ側(PHP)では どのような処理をすればよいのでしょうか? 現在はsubmitForm("testForm.php", false);というような処理にしている為か アクロバットで新たにtestForm.phpのウインドウを作成してしまいます。 サーバ(PHP)からFDFのフォーマットで出力を試みましたが、 テキストファイルとして出力してしまいました。 実現したい処理の手順としては 1.クライアント側からIDとパスワードを送信 2.サーバ側で認証してIDとパスワードから名前(またはエラー)を返す 3.クライアント側では2.の情報をローカルファイル(FDF?)として保存する 4.保存したファイルからの情報(名前等)をPDFのフォームに代入する ※2.の認証に失敗した場合はファイルを閉じる ご指導の程お願い致します。[2004年1月13日 16時20分20秒]
まず、ネットワーク環境についての考慮が必要です。 私自身、それほど経験もないので、推定も加えた回答になります。 phpを使った環境では、PDFlibとの組み合わせになると思います。 いまのところphpは経験がありませんが、phpにはFDF(Forms Data Format)を扱うスクリプトがあったと思います。 PDFlibは、PDFを生成するツールですが、PDFテンプレートも使用できます。 試しに、Acrobatのフォームを組み込んだテンプレートは、エラーが出てだめでした。 サーバーは、クライアントからの要求に答えて、PDFを生成するか、既成のPDFの フォームにFDFを書き込むものと思います。(PDFlibはライセンス料が必要です。) 無償でやりたいのであれば、ASP(Active Sever Pages)でFDFToolkitを使うことに なると思います。(Windows環境に限定されますが。--リナックス環境で使用できるかは よく知りません。) クライアントからのデータの受信は、固有のスクリプトがphpにもあるはずです。 Pythonでは AAA=form["BBB"].value といったスクリプトです。 PDFからsubmitForm()で送るのであれば、HTML形式で送信すればよいはずです。 あとは、送信されたデータをもとに、PDFを生成するか、FDFを既存のテンプレートに 埋め込むか、すればよいわけです。 サーバで生成されたPDFは、PDFlibやFDFToolkitを使ったものでは、バッファ内に 蓄えて、クライアントは、サーバから自動的に受信するだけです。 わたしが最近試しているReportLabでは、サーバ内にPDFを生成して、クライアントは このテーマについての発言をどうぞ。※半角カナは使用しないようにしてください。文字化けします。
記事一覧に戻る