記事タイトル:サーバとの通信 


書き込み欄へ  ヘルプ
お名前: 大西   
>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を生成して、クライアントは

このテーマについての発言をどうぞ。
氏名
E-mail URL


半角カナは使用しないようにしてください。文字化けします。
記事一覧に戻る