Avatar billede pfp Nybegynder
06. marts 2005 - 12:38 Der er 7 kommentarer og
1 løsning

Multiple page spanning med ASP PDF

Hej,

Jeg har leget lidt med at få et ASP script til at eksportere mit kundekartotek fra SQL Server til et pdf dokument.

Det virker i bund og grund også, men jeg har det problem at hvis der nu er flere kunder en der er plads til på den første side, så fortsættes der IKKE automatisk på en ny side, og det meste af mit kartotek bliver dermed "kappet af".

Nogen der har erfaringer med koomponentet, og kan komme med en ledetråd?

Nedenfor ses mit nuværende script:

<%
  SQL = "Select * FROM shop_customerprofiles ORDER BY Name"
  Set rs = Conn.Execute(SQL)
 
  SQL = "Select Count(*) As Amount FROM shop_customerprofiles"
  Set rs2 = Conn.Execute(SQL)
 
  rowQuantity = rs2("amount")
  rs2.close
  Set rs2 = Nothing
 
  Function paintText(intX, intY, intWidth, strAlign, intSize, strFont, strMessage)
    Set Font = Doc.Fonts(strFont)
    Params = "x=" & intX & "; y=" & intY & "; width=" & intWidth & "; alignment=" & strAlign & "; size=" & intSize
    Page.Canvas.DrawText strMessage, Params, Font
    Set Font = Nothing
  End function
   
  Set Pdf = Server.CreateObject("Persits.Pdf")
  Set Doc = Pdf.CreateDocument
   
  Doc.Title = "Kundeoversigt"
  Doc.Creator = "Peter Poulsen"
 
  Set oHelvFont = Doc.Fonts("Verdana")
 
  Set Page = Doc.Pages.Add
 
  ' logo og firmanavn
  Call paintText(54, 750, 550, "left", 16, "Helvetica", "Kundeoversigt")
 
  ' kundens navn og adresse
  Call paintText(54, 720, 550, "left", 11, "Courier New", "Denne rapport blev genereret: " & FormatDateTime(Now,1) & " kl. " & Time)
  Call paintText(54, 705, 550, "left", 11, "Courier New", "Copyright Peter")
  Call paintText(54, 690, 550, "left", 11, "Courier New", "Antal kunder: " & rowQuantity)
   
  ' opretter tabellen
  Set Table = Doc.CreateTable("rows=" & (rowQuantity+1) & "; cols=4; cellspacing=-1; cellpadding=2; height=600; width=500; border=1")
  Table.Font = oHelvFont
 
  ' ///////////////////////////////////////////////////////////////////////////////////////
  '  UDSKRIVER HEADERS PÅ TABELLEN
  ' ///////////////////////////////////////////////////////////////////////////////////////
  With Table.Rows(1)
      .Height = 20
      .bgcolor = &H145A7B
      .Cells(1).AddText "Navn", "alignment=left;color=white;size=9"
      .Cells(2).AddText "Firma", "alignment=left;color=white;size=9"
      .Cells(3).AddText "Telefon", "alignment=right;color=white;size=9"
      .Cells(4).AddText "E-mail", "alignment=right;color=white;size=9" 
  End with
  ' ///////////////////////////////////////////////////////////////////////////////////////
 
  If Not (rs.eof or rs.bof) then
    i = 2
    Do While Not rs.eof
      If isNull(rs("Company")) then
        COMPANY = " "
      Else
        COMPANY = rs("Company")
      End if
     
      If isNull(rs("Phone")) then
        PHONE  = " "
      Else
        PHONE  = rs("Phone")
      End if
     
      If isNull(rs("email")) then
        EMAIL  = " "
      Else
        EMAIL  = rs("email")
      End if
     
      If isNull(rs("name")) then
        STRNAME  = " "
      Else
        STRNAME  = rs("name")
      End if
     
      If i mod 2 = 0 then
        backColor = &HDEDFE3
      Else
        backColor = &HD3D3D3
      End if
      With Table.Rows(i)
        .Height = 18
        .bgcolor = backColor
        .Cells(1).AddText STRNAME, "alignment=left;color=black;size=8"
        .Cells(2).AddText COMPANY, "alignment=left;color=black;size=8"
        .Cells(3).AddText PHONE, "alignment=right;color=black;size=8"
        .Cells(4).AddText EMAIL, "alignment=right;color=black;size=8" 
      end with
      i = i + 1
    rs.movenext
    Loop
   
    Page.Canvas.DrawTable Table, "x=54;y=660"
  End if
  strname  = ("customers_" & Date() & ".pdf") 
  Filename = Doc.Save( Server.MapPath("../files/" & strname), False )
 
  rs.close
  Set rs  = Nothing
  Set Doc = Nothing
  Set Pdf = Nothing
   
  Response.Write "<p>"
  Response.Write "Filen blev genereret med succes.<br>"
  Response.Write "<a href=""../files/" & Filename & """ target=""_blank"">" & Filename & "</a>"
  Response.Write "</p>"
  Response.Write "<p>"
  Response.Write "Højreklik på linket og vælg ""Gem destination som.."" for at gemme rapporten på din harddisk."
  Response.Write "</p>"
%>

/pfp
Avatar billede kjulius Novice
06. marts 2005 - 21:40 #1
Jeg kender ikke noget til din komponent, men har dog fundet manualen på nettet ud fra navnet (Set Pdf = Server.CreateObject("Persits.Pdf")), www.persits.com -->
www.asppdf.com/manual.htm.

Her er der især et afsnit, som synes at behandle det problem du har:

http://www.asppdf.com/manual_07.html#7_3

Som jeg læser det, så kan du få returneret hvor mange linier tabellen kunne rendere i funktionen

Page.Canvas.Drawtable Table, "x=54;y=660"

som kan ændres til

LastRow = Page.Canvas.Drawtable Table, "x=54;y=660"

Hvilket vil give dig mulighed for at starte opbygningen af den næste side fra denne row som vist i eksemplet.
Avatar billede pfp Nybegynder
06. marts 2005 - 22:26 #2
Hej,

Tak for din kommentar.

Jeg har set i API'en, men det kniber lidt for mig at finde ud af at få det implementeret i mit script.
Avatar billede kjulius Novice
07. marts 2005 - 00:13 #3
Okay, så vil jeg forsøge at se, om jeg har forstået manualen korrekt:

I stedet for bare, som du gør, at skrive

Page.Canvas.DrawTable Table, "x=54;y=660"

er du vist nødt til at introducere endnu et loop:

LastRow = Page.Canvas.DrawTable( Table, Param )
Do While LastRow < Tabel.Rows.Count
  Set Page = Page.NextPage
  LastRow = Page.Canvas.DrawTable( Table, "x=54;y=660;RowFrom=" & LastRow+1 )
Loop

(tror jeg)
Avatar billede kjulius Novice
07. marts 2005 - 00:18 #4
Okay, så vil jeg forsøge at se, om jeg har forstået manualen korrekt:

I stedet for bare, som du gør, at skrive

Page.Canvas.DrawTable Table, "x=54;y=660"

er du vist nødt til at introducere endnu et loop:

LastRow = Page.Canvas.DrawTable( Table, "x=54;y=660" )
Do While LastRow < Tabel.Rows.Count
  Set Page = Page.NextPage
  LastRow = Page.Canvas.DrawTable( Table, "x=54;y=660;RowFrom=" & LastRow+1 )
Loop

(tror jeg)
Avatar billede pfp Nybegynder
07. marts 2005 - 01:03 #5
Du havde forstået manualen rigtig. Nu spiller det bare.

Tak.

Smid et svar.
Avatar billede kjulius Novice
07. marts 2005 - 18:55 #6
Done! :-)
Avatar billede pfp Nybegynder
07. marts 2005 - 23:00 #7
Tak!
Avatar billede wolfgang Praktikant
27. januar 2006 - 14:00 #8
Hej - Jeg tillader mig lige at fange jeres opmærksomhed.
Jeg har brugt eksemplet i dette spørgsmål til min kode, men er nu stødt ind i en ny forhindring.

http://www.eksperten.dk/spm/683189
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester