ASPでPDF文書を作成する〜超簡単、PDF文書を作成する(パート2)!
(FDF Toolkit使用)

(
「PerlでPDF文書を作成する〜超簡単、PDF文書を作成する!」より、めちゃ簡単です。)

(2005.5初版-2005.6.18改版)
INDEX;

 1.サンプルアプリケーションの構成 
 2.システム構成(動作環境) 
 3.ASPアプリ作成手順
  -FDF Toolkitインストール
  -FDF処理関連メッソド 等
 4.サンプルASPソース
 5.ダウンロード

>ASPでPDF文書を作成する2続画像編〜
超簡単、PDF文書を作成する(パート5)!
(FDF Toolkit使用)05.6.18
・・・簡単 PDFフォーム入力&画像送信!! 

 >サイト内PDF関連リンク
       
TARGET;ASPでFDF(Format Data Format)ファイルを作成し、
 PDF文書を表示・印刷する。
・Adobe FDF ToolKitをインストールする。
 -FDF Tollkitを使用するとテンプレートFDF生成できますので
  、手作業でテンプレートFDFを作成することがなくなります。
  すなわち、FDFのフォーマット仕様を意識しないで済みます。
・入力フォームは、HTMLを使用する。
・作成PDFは、予めテンプレートPDFとして用意する。
 テンプレートPDFの良い点は、
 ・様式のデザインが自由に配置できる
 ・多彩でグラフィックな様式が可能 等
・Webで文書(伝票)を作成する等利用が広がります。
 -社内OAで利用ができます。現在利用しているWORD文書をPDF
  に変換しAdobe AcrobatでPDFフォーム(デフォルトPDF)を
  作成すれば、Webで文書(伝票)の管理、発行が可能です。
        

1.サンプルアプリケーションの構成

図1 サンプルASPアプリケーションの構成
(説明)
 (1) *1:サンプルASPの入力フォーム
     
 (2) *2,*3,*4:処理結果
    OUT@(*2):PDFをクライアント画面に表示します。
    OUTA(*3):処理結果のFDFファイルをサーバーに保存します。クライアント画面には、ハイパーリンクを
           表示します。クリックによりPDFをクライアント画面に表示します。
           このFDFファイルは削除されず残ります。
    OUTB(*4):処理結果のFDFファイルのダウンロード画面をクライアントに表示します。
 (3) *5:FDFファイル(\tmpフォルダに保存)
    例. fdfsave-200505131454206414.fdf
     fdfsave-:固定
     200505131454206414:年月日+時分秒+4桁の乱数(重複を避けるため)
 (4) *6:テンプレートPDF(\pfdフォルダに保存)
     ・様式:>ringisyo-form.pdfを参照
     ・テンプレートPDFの作成方法は、「PerlでPDF文書を作成する〜超簡単、PDF文書を作成する!」を参照
 (5)サンプルASPのファイル構成(このファイル全体をダウンロードできます)
    
表1 サンプルASPのファイル構成
 [actxfdf] (テスト環境パス C:\Inetpub\wwwroot\actxfdf)
      +--[img]               ←画像類
      +--[pdf]               ←PDFファイル保存フォルダ
           +--ringisyo-form.pdf      ←表示用テンプレートPDF(ASPでPDF文書を作成する)
           +--ringisyo-inform2-2.pdf ←入力用PDFフォーム(ASPでPDF文書を作成する2続画像編)
           +--ringisyo-form2-2.pdf   ←表示用テンプレートPDF(ASPでPDF文書を作成する2続画像編)
      +--[tmp]                   ←作成FDF/画像用作業PDFファイル保存フォルダ
      +--howtomake-pdf2.html     ←本ページASPでPDF文書を作成する解説
      +--howtomake-pdf2-2.html   ←ASPでPDF文書を作成する2続画像編解説
      +--generatefdf-sample.asp  ←ASPでPDF文書を作成するのサンプルASP
      +--parsefdf-sample.asp     ←ASPでPDF文書を作成する2続画像編のサンプルASP
       
        
 (6)起動方法
    http://.../actxfdf/generatefdf-sample.asp (パラメータなし)

2.システム構成

  動作環境は下表のとおりです。
表2 システム構成
走行確認OS
(サーバー)
・Windows2000 Server
・Windows2000Pro+IIS5(TEST環境)
・Windows98SE+PWS(TEST環境)
Windows XP+IIS5では、未確認です。
必要ソフト
(サーバ)
・FdfAcx.dll(ActiveXコンポーネント用)
・FdfTk.dll(Toolkit用)

dll のインストールが必要
クライアント・InternetExplorler5.0以上
・Adobe Acrobat4.0以上(PDFフォーム作成用)
・Acrobat Reader4.0以上
ユーザクアリアントでは、Adobe Acrobatは不要
 (注1)サーバにはAdobe FDF ToolKit for ActiveX(FdfAcx.dll及びFdfTk.dll)のインストールが必要です。
    FDF ToolKitは、http://www.adobe.com/devnet/acrobat/fdftoolkit.html より入手します。(2008.8.25)
    (フリーですがパートナー登録が必要です)
        
        >FDF ToolKit インストール方法

 (注2)Adobe Acrobat4.0以上が必要です

3.ASPアプリ作成手順

 (1)作成PDF文書の作成
    WORDやEXCELで作成し、PDFに変換します。
 (2)PFDフォームの作成(テンプレートPDFまたはデフォルトPDFと言う)
    前項(1)で作成したPDFをAdobe AcrobatでPDFフォームを作成します。
    PDFフォームの作成方法は、「PerlでPDF文書を作成する〜超簡単、PDF文書を作成する!」を参照
 (3)ASP(アプリケーション)の作成(FDF Toolkit メソッド仕様)

   ●FDF Toolkitオブジェクト生成

    Set FdfAcx = Server.CreateObject("FdfApp.FdfApp")

   ●FDF Toolkitメソッド(主なものみ掲載しています)
メソッド説明
1FDFAppオブジェクト関連(全5メソッド)
FDFCreate新しいFDFファイルを生成する。
Set resFDF = FdfAcX.FDFCreate
FDFOpenFromFile外部ファイルをオープンする。
Mypath = server.mappath("./pdf/ringisyo-templatefdf.fdf")
Set resFDF = FdfAcx.FDFOpenFromFile(Mypath)
FDFOpenFromBufバッファーからFDFをオープンする。
Set FDFin = FdfAcx.FDFOpenFromBuf (Request.BinaryRead(Request.TotalBytes))
FDFOpenFromStrストリングをオープンする。
2一般メソッド(全7メソッド)
FDFCloseFDFファイルが使用したリソースをクローズする。
Set resFDF = FdfAcx.FDFOpenFromFile(Mypath)
・・・
resFDF.FDFClose
FDFSaveToBuf処理した結果をバッファーに書き出す。
resFDF.FDFSetValue "p_kiansya",p_kiansya,False '処理
・・・
Response.ContentType = "application/vnd.fdf"
Response.BinaryWrite resFDF.FDFSaveToBuf
FDFSaveToFile処理した結果をファイルに書き出す。
resFDF.FDFSavetoFile "C:\Inetpub\wwwroot\actxfdf\tmp\" & fdfoutname
FDFSaveToStr処理した結果をストリングに書き出す。
3FDFデータをパース(GET)するメソッド
(全13メソッド)
FDFGetAP
FDF(入力バッファー)の/APフィールドの外観(アイコン画像)を取得し、
新しいPDF(img.pdf)を生成する。(画像のみのPDFが出来る)
Const FDFNormalAP = 0 
Set FDFin = FdfAcx.FDFOpenFromBuf (Request.BinaryRead(Request.TotalBytes))
    '''(↑ PDFフォームの書き出し形式「FDF」のデータをバッファーに読み込む場合)
FDFin.FDFGetAP "photo", FDFNormalAP, "C:\Inetpub\wwwroot\ringi2\tmp\img.pdf"
  (パラメータ)
   ・"photo"(fieldName):ボタンアイコンのフィールド名
   ・FDFNormalAP(whichFace):
     FDFNormalAP/FDFRolloverAP/FDFDownAPのいずれかの値
     Activexの場合、0/1/2 の値を書きます。
   ・fileName:新しく生成するPDFファイル名
         "C:\Inetpub\wwwroot\ringi2\tmp\img.pdf"
4FDFデータを設定(SET)するメソッド
(全25メソッド)
FDFSetAP
PDF(img.pdf)から/APキーの外観(アイコン画像)を取得し、
FDF(出力バッファー)に設定する。
outFDF.FDFSetAP "photo", FDFNormalAP, "C:\Inetpub\wwwroot\ringi2\tmp\img.pdf",1
  (パラメータ)
   ・ "photo"(fieldName):ボタンフィールドのフィールド名
   ・FDFNormalAP(whichFace):
      FDFNormalAP/FDFRolloverAP/FDFDownAPのいずれかの値
      Activexの場合、0/1/2 の値を書きます。
   ・subAP:Activexの場合、記入しない。
   ・fileName:ボタンが存在するPDFファイル名
          "C:\Inetpub\wwwroot\ringi2\tmp\img.pdf"
   ・pageNum:ボタンが存在するPDFファイルのページNo。1
FDFSetFileFDFの/Fキーの値を設定する。(テンプレートPDFのURL)
resFDF.FDFSetFile "http://127.0.0.1/actxfdf/pdf/ringisyo-form.pdf"
FDFSetValueFDFの/Vキーの値を設定する。
resFDF.FDFSetValue "p_kiansya","松浦亜弥",False
 (4)FDF ToolKit for ActiveX(ASP用)のインストール(初回のみ)
   
ダウンロードファイルFDFToolkitForWindows.zipの解凍後のフォルダ

   
 @ FdfAcx.dll(\FDFToolkit for Windows\Headers and Libraries\WIN\FDFAcX内B)及び
     FdfTk.dll(\FDFToolkit for Windows\Headers and Libraries\win\C内A)を次のフォルダにコピーします。
         
 A FdfAcx.dllをregsvr32コマンドで登録します。
      
(コマンドプロンプトの例)       
 C:\winnt\> cd \winnt\system32      ←コピー先に移動       
 C:\winnt\system32> regsvr32 FdfAcx.dll ←レジストリーに登録

4.サンプルASPソース

   サンプルASP(generatefdf-sample.asp)は、データの入力はHTMLフォームからの
   POSTデータのみ対応しています。FDFデータの入力処理は対応していません。 
      FDFデータ(PDFフォーム)対応サンプルASPは、>超簡単、PDF文書を作成する(パート5)!
generatefdf-sample.asp
<%@ LANGUAGE = VBScript%>
<%
'/////FDF ToolKit for ActiveX を用いたPDFの作り方-2005.4.13 ////////////////////////////////////////'
'1.テンプレート用FDFが不要です。
'2.PDF(FDF)の出力方法には3通りあります
'  (1)ダウンロード:クライアントにFDFファイルを名を付けてアタッチメント(ダウンロード画面表示)
'  (2)ファイル作成:サーバにFDFファイルを名を付けて保存(HTMLにハイパーリンク表示)
'  (3)画面表示:PDFを画面に直接表示
'///////////////////////////////////////////////////////////////////////////////////////////////////'
Dim ransuu,dates,times,fdfoutname
'--入力フォームデータ
p=request("p") '機能区分 p=f(入力フォーム) p=fdf(FDF作成)
out=request("out") '出力方法 dload(ダウンロード) file(サーバにファイル作成) gamen(画面に直接表示)
p_kenmei=request("f_kenmei")
p_kianbi=request("f_kianbi")
p_kiansya=request("f_kiansya")
p_naiyo=request("f_naiyo")
'--入力フォーム表示
if p = "" then
   call informdisp()
   Response.End
end if
	
'以下FDF処理
'--出力ファイル名作成 ファイル名:fdfsave-yymmddhhmmss-4桁の乱数.fdf
dates=Date '年月日yymmdd
times=Time '時分秒hhmmss
yymmdd=Replace(dates,"/","") 'yy/mm/dd の/を削除し数字のみにする
hhmmss=Replace(times,":","") 'hh:mm:ss の:を削除し数字のみにする
Randomize                    '乱数の初期化
ransuu = int(10000*Rnd)      '乱数 出力ファイル名の一部に使用(ファイル名の重複をさける)
fdfoutname="fdfsave-" & yymmdd & hhmmss & CStr(ransuu) & ".fdf" 'FDFファイル名
	
Dim FdfAcx,resFDF
	
'--FDF出力方法の振り分け
Select Case out
 Case "dload"
  call dload_fdfout() 'FDFファイルダウンロード。ダウンロード画面表示。
 Case "file"
  call file_fdfout()  'サーバにファイル保存。画面にハイパーリンクを表示。クリックでPDF表示。
 Case "gamen"
  call gamen_fdfout() 'PDF画面表示
End Select
	
'###サブルーチン###
'FDFファイルをクライアントにダウンロードする----------------------------------------
sub dload_fdfout()
'FDF ActiveX オブジェクトの定義
Set FdfAcx = Server.CreateObject("FdfApp.FdfApp") 
	
'テンプレートFDFオープン(入力FDFの指定方法1)
'Mypath = server.mappath("./pdf/ringisyo-templatefdf.fdf") 'テンプレートFDFのURL(相対パス)
'Set resFDF = FdfAcx.FDFOpenFromFile(Mypath)
	
'新しいFDF生成     (入力FDFの指定方法2)
Set resFDF = FdfAcX.FDFCreate
	
'テンプレートFDF内の変数(/V key)に値を設定
 resFDF.FDFSetValue "p_kenmei",p_kenmei,False
 resFDF.FDFSetValue "p_kianbi",p_kianbi,False
 resFDF.FDFSetValue "p_kiansya",p_kiansya,False
 resFDF.FDFSetValue "p_naiyo",p_naiyo,False
 resFDF.FDFSetFile "http://127.0.0.1/actxfdf/pdf/ringisyo-form.pdf" 'テンプレートPDFのURL(フルパスが望ましい)
'設定結果のFDFをファイル名を付けてクライアントでダウンロード
Response.ContentType = "application/vnd.fdf" 'MIMEタイプ FDF
Response.AddHeader "Content-Disposition","attachment; filename=" & fdfoutname 'アタッチメント ファイル名の設定
Response.BinaryWrite resFDF.FDFSaveToBuf 'FDFデータをバッファーに出力
'クローズ
resFDF.FDFClose
set resFDF = nothing
set FdfAcx = nothing
End sub
'FDFファイルをサーバに保存する------------------------------------------
sub file_fdfout()
'FDF ActiveX オブジェクトの定義
Set FdfAcx = Server.CreateObject("FdfApp.FdfApp") 
	
'テンプレートFDFオープン(入力FDFの指定方法1)
'Mypath = server.mappath("./pdf/ringisyo-templatefdf.fdf") 'テンプレートFDFのURL(相対パス)
'Set resFDF = FdfAcx.FDFOpenFromFile(Mypath)

'新しいFDF生成     (入力FDFの指定方法2)
Set resFDF = FdfAcX.FDFCreate

'テンプレートFDF内の変数(/V key)に値を設定
 resFDF.FDFSetValue "p_kenmei",p_kenmei,False
 resFDF.FDFSetValue "p_kianbi",p_kianbi,False
 resFDF.FDFSetValue "p_kiansya",p_kiansya,False
 resFDF.FDFSetValue "p_naiyo",p_naiyo,False
 resFDF.FDFSetFile "http://127.0.0.1/actxfdf/pdf/ringisyo-form.pdf" 'テンプレートPDFのURL(フルパスが望ましい)
'設定結果のFDFをファイル名を付けて保存
resFDF.FDFSavetoFile "C:\Inetpub\wwwroot\actxfdf\tmp\" & fdfoutname 'FDFファイルの保存物理パス(フルパス)
'クローズ
resFDF.FDFClose
set resFDF = nothing
set FdfAcx = nothing
'HTMLにハイパーリンクを表示
Call htmlheader
 Response.write "<body style=""font-size:15px"">" & chr(13)
 Response.write "<p align=center style=""font-size:15px"">FDFファイルを作成しました・・・ファイル名をクリックして下さい。<br><br>" & chr(13)
 Response.write "<a href=""http://127.0.0.1/actxfdf/tmp/" & fdfoutname & """>" & fdfoutname & "</a></p>" & chr(13) '保存FDFファイルのハイパーリンク
 Response.write "</body></html>" & chr(13) 
    	End sub
'PDFをクライアントの画面に直接表示する----------------------------------------
sub gamen_fdfout()
'FDF ActiveX オブジェクトの定義
Set FdfAcx = Server.CreateObject("FdfApp.FdfApp") 

'テンプレートFDFオープン(入力FDFの指定方法1)
'Mypath = server.mappath("./pdf/ringisyo-templatefdf.fdf") 'テンプレートFDFのURL(相対パス)
'Set resFDF = FdfAcx.FDFOpenFromFile(Mypath)

'新しいFDF生成     (入力FDFの指定方法2)
Set resFDF = FdfAcX.FDFCreate

'テンプレートFDF内の変数(/V key)に値を設定
 resFDF.FDFSetValue "p_kenmei",p_kenmei,False
 resFDF.FDFSetValue "p_kianbi",p_kianbi,False
 resFDF.FDFSetValue "p_kiansya",p_kiansya,False
 resFDF.FDFSetValue "p_naiyo",p_naiyo,False
 resFDF.FDFSetFile "http://127.0.0.1/actxfdf/pdf/ringisyo-form.pdf" 'テンプレートPDFのURL(フルパスが望ましい)
'設定結果のFDFをファイル名を付けてクライアントでダウンロード
Response.ContentType = "application/vnd.fdf" 'MIMEタイプ FDF
'Response.AddHeader "Content-Disposition","attachment; filename=" & fdfoutname '画面表示の場合ファイル名不要
Response.BinaryWrite resFDF.FDFSaveToBuf 'FDFデータをバッファーに出力
'クローズ
resFDF.FDFClose
set resFDF = nothing
set FdfAcx = nothing
End sub

'入力フォーム画面-------------------------------------------
sub informdisp() 
Call htmlheader
Response.write "<body style=""font-size:15px"">" & chr(13)
Response.write " <form method=post action=""generatefdf-sample.asp"" name=f target='_self'>" & chr(13)
Response.write " <input type=hidden name=p value=""fdf"">" & chr(13)
Response.write " <TABLE cellpadding=0 cellspacing=0 bgcolor=navy border=0><TR><TD>" & chr(13)
Response.write " <table style='font-size:15px' cellpadding=3 cellspacing=1><caption style='font-weight:bold;font-size:16px;color:#ffffff'>稟議書作成</caption>" & chr(13)
Response.write " <tr bgcolor=lightcyan><td nowrap>件名</td><td><input type=text name=f_kenmei value="""" size=60 maxlength=80></td></tr>" & chr(13)
Response.write " <tr bgcolor=lightcyan><td nowrap>起案日</td><td nowrap>" & chr(13)
Response.write " <input type=text name=f_kianbi value="""" size=40 maxlength=20></td></tr>" & chr(13)
Response.write " <tr bgcolor=lightcyan><td nowrap>起案者</td><td nowrap>" & chr(13)
Response.write " <select name=f_busyo>" & chr(13)
Response.write " <option>総務課" & chr(13)
Response.write " <option>広報課" & chr(13)
Response.write " <option>営業部" & chr(13)
Response.write " <option>システム開発部1課" & chr(13)
Response.write " <option>システム開発部2課" & chr(13)
Response.write " </slect><input type=text name=f_kiansya value="""" size=40 maxlength=40><small>(所属部署、氏名</small>" & chr(13)
Response.write " </td></tr>" & chr(13)
Response.write " <tr bgcolor=lightcyan><td nowrap>内容<br><small>(1000文字以内)</small></td><td><textarea name=f_naiyo rows=6 cols=76 wrap=hard></textarea></td></tr>" & chr(13)
Response.write " <tr bgcolor=lightcyan> <td colspan=2 align=center nowrap>" & chr(13)
Response.write " <input type=radio name=out value=""dload"">ダウンロード<input type=radio name=out value=""file"" >FDFファイル作成<input type=radio name=out value=""gamen"" >画面直接表示&nbsp;&nbsp;" & chr(13)
Response.write " <input type=button name=subm value=""作 成"" CLASS=botan1 onClick=""form_check()"">" & chr(13)
Response.write " <input type=reset name=subm value=""リセット"" CLASS=botan1></td></tr>" & chr(13)
Response.write " </table>" & chr(13)
Response.write " </TD></TR></TABLE>" & chr(13)
Response.write " </form>" & chr(13)
Response.write " </body></html>" & chr(13)
End sub
'HTML ヘッダー---------------------------------------------
sub htmlheader() '入力フォーム画面
Response.write "<html>" & chr(13)
Response.write "<head>" & chr(13)
Response.write "<title>稟議書入力フォーム</title>" & chr(13)
Response.write "<meta http-equiv=""Content-Type"" content=""text/html; charset=Shift_JIS"">" & chr(13)
Response.write "<SCRIPT language=javascript>" & chr(13)
Response.write "<!--" & chr(13)
Response.write "function form_check(){" & chr(13)
Response.write "   document.f.submit() " & chr(13)
Response.write "}" & chr(13)
Response.write "//-->" & chr(13)
Response.write "</SCRIPT>" & chr(13)
Response.write "</head>" & chr(13)
End sub
%>

5.サンプルASPダウンロード

   ・サンプルASPのダウンロード(フリー)

    ダウンロードファイルの内容は、
    「1.サンプルアプリケーションの構成-表1 サンプルASPのファイル構成」です。
>UP

(サイト内PDF関連リンク)
NoタイトルFDF Toolkitスクリプト備考
1 PerlでPDF文書を作成する〜超簡単、PDF文書を作成する!(FDF Toolkit未使用例) 不要Perl CGI
2 PDFフォーム作成方法編 -HTML
3 ASPでPDF文書を作成する〜超簡単、PDF文書を作成する(パート2)!(FDF Toolkit使用) 必要ASP
4 PerでPDF文書を作成する2〜超簡単、PDF文書を作成する(パート3)!(FDF Toolkit使用) 必要Perl CGI
5 PerでPDF文書を作成する2続画像編〜超簡単、PDF文書を作成する(パート4)!(FDF Toolkit使用) 必要Perl CGI画像送信
6 ASPでPDF文書を作成する2画像続編〜超簡単、PDF文書を作成する(パート5)!(FDF Toolkit使用) 必要ASP画像送信


HOME Profile BBS Chat Game Center GD Graph PDF Make ASP Apli Make MID FONT IE Filter Mini Bonsai Web Color List E-m@il

最終更新日:2008.8.25(Toolkit download site 変更)