【ASP】透過ASPPDF元件來匯出PDF檔

引用ASPPDF元件,首先要到官網下載,並且安裝之。
ASPPDF元件不僅可以產生PDF檔,也可以產生成圖片檔及BarCode等,詳見官網。

程式部分:
  '定義PDF 物件
  Set PDF = Server.CreateObject("Persits.Pdf")          '建立ASPPdf物件
  Set Param = PDF.CreateParam                           '建立參數
  Set Param_header = PDF.CreateParam                    '建立參數(計畫標題)
  Set Param_M = PDF.CreateParam                         '建立參數(金額)
  Set Doc = PDF.CreateDocument                          '建立文件   Create empty document 

  ' Set various document properties 文件屬性
Doc.Title = "Jason"            '文件標題
 Doc.Creator = "By Jason Lian"  '文件建立者
Param.Set("alignment=center;size=12;valignment=middle;")                '字型參數
Param_header.Set("alignment=center;size=14;valignment=middle;")         '字型參數(計畫標題)
Param_M.Set("alignment=right;size=12;valignment=middle;")                '字型參數

sqlstr="SELECT * FROM report WHERE (IsDelete = 0) ORDER BY  Type"
    set rs=Exec_Record(sqlstr)
    if not rs.eof then
     'Create table '建立表格
  Set Table = Doc.CreateTable("width=700; height=400; Rows=12; Cols=7; Border=1; CellSpacing=-1; cellpadding=2 ")               
          Table.Font = Doc.Fonts.LoadFromFile(Server.MapPath("/Fonts") & "/" & "kaiu.ttf")   '設定字型
       
       FilePath = Server.MapPath("/tmppdf") & "/" & title & ".pdf"      'PDF檔案路徑

  ' Set column widths 設定欄位寬度
    With Table.Rows(1)
    .Cells(1).Width = 45
   .Cells(2).Width = 120
     .Cells(3).Width = 120
     .Cells(4).Width = 120
     .Cells(5).Width = 120
     .Cells(6).Width = 115
     .Cells(7).Width = 50
   End With
   
   '合併儲存格(計畫標題)
     Table(1,1).Colspan = 7
   Table.Rows(1).Height =30  '列高
   
  '計畫標題
   With Table.Rows(1)
        .Cells(1).AddText title, Param_header 
   End With

  '項目標題
  LabelArray = array("項次","工程經費項目","計畫核定經費","已發生計畫經費","結餘款","計畫經費已發生率","狀態")
  '粗體可加<b></b>
  for i = 0 to UBound(LabelArray)                                     
            With Table.Rows(2) 
                 .Cells(i+1).AddText LabelArray(i), Param
            End With 
    next
  rcountTag = trim(cstr(rs.recordcount)) '總筆數

  i=0
 do while not rs.eof
        i=i+1
            '總計(A+B+C)
              if trim(rs("type"))="A" or trim(rs("type"))="B" or trim(rs("type"))="C" then
              sum1=sum1+rs("approved_cost")
                sum2=sum2+rs("runed_cost")
                sum3=sum3+rs("surplus")
              end if
         
        '計畫經費已發生率
        rate=FormatPercent(rs("runed_cost")/rs("approved_cost"),0)
        '狀態
        if rate > FormatPercent(0.95,0) then
           status="警戒"
        else
           status="正常"
        end if
         '內容
         With Table.Rows(i+2)
                   .Cells(1).AddText trim(rs("Type")) ,Param
                   .Cells(2).AddText trim(rs("Type_name")) ,Param
                   .Cells(3).AddText mid(FormatCurrency(rs("approved_cost"),0),4) ,Param_M
                   .Cells(4).AddText mid(FormatCurrency(rs("runed_cost"),0),4) ,Param_M
                   .Cells(5).AddText mid(FormatCurrency(rs("surplus"),0),4) ,Param_M
                   .Cells(6).AddText rate,Param
                   .Cells(7).AddText status,Param
            End With
  rs.movenext
 loop
     '計畫經費已發生率
     sum_rate=FormatPercent(sum2/sum1,0)

     '狀態
     if sum_rate > FormatPercent(0.95,0) then
           sum_status="警戒"           
     else
           sum_status="正常"            
     end if

    '總計(A+B+C)
     Table(11,1).Colspan = 2
     With Table.Rows(11)
                   .Cells(1).AddText "總計(A+B+C)" ,Param
                   .Cells(3).AddText mid(FormatCurrency(sum1,0),4) ,Param_M
                   .Cells(4).AddText mid(FormatCurrency(sum2,0),4) ,Param_M
                   .Cells(5).AddText mid(FormatCurrency(sum3,0),4) ,Param_M
                   .Cells(6).AddText sum_rate,Param
                   .Cells(7).AddText sum_status,Param
          End With

  '註記
     remark=" 計畫經費已發生率逾95﹪  狀態:警戒"              
     Table(12,1).Colspan = 7
     Table.Rows(12).Cells(1).CellPadding = 8
     Table.Rows(12).Cells(1).AddText remark ,Param_M 
     '另外寫法
     'Table.At(12, 1).AddText remark ,Param_M 
              
    '============開新頁面==========             
     Set Page = Doc.Pages.Add(750, 600)        '開新頁面,頁面寬與高度                                
              Param.Clear                                 '將屬性清空
              Param("x") = (Page.Width - Table.Width) / 2 'x軸位置
              Param("y") = Page.Height - 20               'y軸位置
          Page.Canvas.DrawTable Table, Param                     '將設定好的資料及表格寫到頁面上
         '存檔,若存在相同檔名則覆蓋        
         FileName = Doc.Save(FilePath, true)                 

    end if
    rs.close : set rs = nothing
    
    Set Doc = Nothing
    Set Pdf = Nothing

'下載PDF 
Response.Write "Success! Download your PDF file <A HREF=/tmppdf/" & Filename & ">here</A>"

PDF內容畫面:


參考資源:
ASPPDF官網

ASPPDF官方手冊

留言

這個網誌中的熱門文章

【ASP】日期轉換(西元<-->民國)

【VB】使用NPOI元件來匯出Excel--DataTableToExcel

【SQL】符號切割字串變成多欄