Seite 2 von 7

Re: [Module] pbPDF-Module

Verfasst: 20.06.2019 12:28
von Thorsten1867
Bugfix: PNG-Bilder einbetten

Re: [Module] pbPDF-Module

Verfasst: 25.06.2019 09:37
von ThoPie
Hallo zusammen,

ich nutze dieses Modul in meinem Projekt. Alles funktioniert - bis auf den automatischen Seitenumbruch. Es wird nur eine Seite erzeugt und der Text "fließt" unten raus.
Mein Code sieht wie folgt aus

Code: Alles auswählen

PDF::Create(#filPDF)
  PDF::SetHeaderProcedure(#filPDF,@Listenkopf())
  PDF::SetFooterProcedure(#filPDF,@Listenfuss())
  PDF::EnableHeader(#filPDF)
  PDF::EnableFooter(#filPDF)
  PDF::SetOpenAction(#filPDF)
  PDF::SetInfo(#filPDF,PDF::#Title,Listentitel)
  PDF::SetInfo(#filPDF,PDF::#Author,#PN+" "+#PV)
  PDF::SetPageMargins(#filPDF,20,10,10)
  PDF::SetAutoPageBreak(#filPDF,#True)
  PDF::AddPage(#filPDF)
Was mache ich da falsch? Vielen Dank.

Re: [Module] pbPDF-Module

Verfasst: 25.06.2019 20:18
von Thorsten1867
Bugfix: AutoPageBreak

Re: [Module] pbPDF-Module

Verfasst: 26.06.2019 07:03
von ThoPie
Hallo,
vielen Dank für den BugFix.
Leider brachte es bei mir keine Besserung.

Re: [Module] pbPDF-Module

Verfasst: 26.06.2019 08:19
von Thorsten1867
Ich habe ein Beispiel eingefügt (Seite 4-5) und es noch mal hochgeladen.
(Bei letztem Update sollte 26.6.2019 stehen.)

Re: [Module] pbPDF-Module

Verfasst: 27.06.2019 08:17
von ThoPie
Hallo nochmal,
also bei deinem Beispiel funktioniert der automatische Seitenumbruch. Aber bei meinem Beispiel will das nicht. So sieht mein Testcode aus. Was mache ich da falsch?

Code: Alles auswählen

Enumeration
  #filPDF  
EndEnumeration

Procedure PDFTest()
  PDF::Create(#filPDF)
  PDF::SetAliasTotalPages(#filPDF,"{tp}")
;   PDF::EnableHeader(#filPDF)
;   PDF::EnableFooter(#filPDF)
;   PDF::SetHeaderProcedure(#filPDF,@Listenkopf())
;   PDF::SetFooterProcedure(#filPDF,@Listenfuss())
  PDF::SetInfo(#filPDF,PDF::#Titel,"Titel")
  PDF::SetInfo(#filPDF,PDF::#Author,"Autor")
  PDF::SetPageMargins(#filPDF,20,10,10)
  PDF::SetPageNumbering(#filPDF,#True)
  PDF::AddPage(#filPDF)
  PDF::SetAutoPageBreak(#filPDF,#True) 
  PDF::SetFont(#filPDF,"Arial","",9)
  For i=0 To 100
    i+1
    PDF::Cell(#filPDF,Str(i),8,5,#False,#False,"R")
    PDF::Cell(#filPDF,"",3)
    PDF::Cell(#filPDF,"10000",20,5,0,0,"R")
    PDF::Cell(#filPDF,"Schmidt, Anton",50,5)
    PDF::Cell(#filPDF,"Teststraße 12",0,5,#False,PDF::#NextLine)
    PDF::Cell(#filPDF,"",81)
    PDF::Cell(#filPDF,"11111",15,5)
    PDF::Cell(#filPDF,"Testhausen",0,5,#False,PDF::#NextLine)
  Next
  PDF::Save(#filPDF,"C:\1\Test.pdf")
  RunProgram(#DQUOTE$+"C:\1\Test.pdf"+#DQUOTE$,"","")
EndProcedure

PDFTest()

Re: [Module] pbPDF-Module

Verfasst: 27.06.2019 09:04
von Thorsten1867
Bugfix: Preferences for footer (AutoPageBreak)
Bugfix: AddPage (Fonts)

Re: [Module] pbPDF-Module

Verfasst: 27.06.2019 09:38
von ThoPie
Und wieder mal ich.
Jetzt werden zwar die Seiten angelegt, aber sobald Header und Footer im Spiel sind sind die Seiten ab Seite 2 leer und es erscheint in PDF-Fehler.
Sind Header und Footer nicht drin, funktioniert es. Da ist dann die Schriftart und -größe ab Seite 2 allerdings dann auf "Standard" und nicht wie auf Seite 1.

Re: [Module] pbPDF-Module

Verfasst: 27.06.2019 10:31
von Thorsten1867
ThoPie hat geschrieben:Sind Header und Footer nicht drin, funktioniert es. Da ist dann die Schriftart und -größe ab Seite 2 allerdings dann auf "Standard" und nicht wie auf Seite 1.

Code: Alles auswählen

IncludeFile "pbPDFModule.pbi"

Enumeration 1
  #filPDF  
EndEnumeration

Procedure Listenkopf()
  
EndProcedure

Procedure Listenfuss()
  PDF::SetPosY(#filPDF, -15)
  PDF::SetFont(#filPDF, "Arial", "BI", 9)
  PDF::Cell(#filPDF, "Page {p} / {tp}", #PB_Default, 10, 0, 0, PDF::#CenterAlign)
EndProcedure

Procedure PDFTest()
  PDF::Create(#filPDF)
  
  PDF::SetHeaderProcedure(#filPDF, @Listenkopf())
  PDF::SetFooterProcedure(#filPDF, @Listenfuss()) ; muss definiert werden, bevor der Footer aktiviert wird!
  PDF::SetAliasTotalPages(#filPDF,"{tp}")
  
  PDF::EnableHeader(#filPDF)
  PDF::EnableFooter(#filPDF)
  PDF::SetInfo(#filPDF,PDF::#Titel,"Titel")
  PDF::SetInfo(#filPDF,PDF::#Author,"Autor")
  PDF::SetPageMargins(#filPDF,20,10,10)
  PDF::SetPageNumbering(#filPDF,#True)
  PDF::AddPage(#filPDF)
  PDF::SetAutoPageBreak(#filPDF, #True, 20) 
  PDF::SetFont(#filPDF,"Arial","",9)
  For i=0 To 100
    i+1
    PDF::Cell(#filPDF,Str(i),8,5,#False,#False,"R")
    PDF::Cell(#filPDF,"",3)
    PDF::Cell(#filPDF,"10000",20,5,0,0,"R")
    PDF::Cell(#filPDF,"Schmidt, Anton",50,5)
    PDF::Cell(#filPDF,"Teststraße 12",0,5,#False,PDF::#NextLine)
    PDF::Cell(#filPDF,"",81)
    PDF::Cell(#filPDF,"11111",15,5)
    PDF::Cell(#filPDF,"Testhausen",0,5,#False,PDF::#NextLine)
  Next
  PDF::Save(#filPDF,"Test.pdf")
  RunProgram(#DQUOTE$+"Test.pdf"+#DQUOTE$,"","")
EndProcedure

PDFTest()

Re: [Module] pbPDF-Module

Verfasst: 30.06.2019 23:13
von MenschMarkus
Sorry für die Störung

ich verwende Deinen Code wie folgt:

Code: Alles auswählen

XIncludeFile "pbPDFModule.pbi"

#PDFFile = 1

Procedure   PDFFooter_Module()
  PDF::SetPosY(#PDFFile,-15)
  PDF::SetFont(#PDFFile,"Arial","I",9)
  PDF::Cell(#PDFFile,"Seite  {p} / {tp}",#PB_Default,10,0,0,PDF::#CenterAlign)
  PDF::Ln(#PDFFile,6)
  PDF::SetFont(#PDFFile,"Helvetica","I",4)
  PDF::Cell(#PDFFile,"( © <Name> 2019 )  <Complete footer information> ",#PB_Default,10,0,0,PDF::#CenterAlign)
EndProcedure

; Procedure   pdfHeader_Module()
;   PDF::SETFont(#PDFFile,"Arial","",10)  
;   PDF::Image(#PDFFile,"D:\......\ZSPDF.jpg",5,5,56,16)
; EndProcedure


Procedure runPDF()
  Protected i.i
  PDF::SETFont(#PDFFile,"Arial","",10)  
  ;PDF::HeaderProcedure(@pdfHeader_Module())
  PDF::FooterProcedure(@PDFFooter_Module())
  PDF::Create(#PDFFile,"P")
  PDF::SetAliasTotalPages(#PDFFile,"{tp}")
  ;PDF::EnableHeader(#PDFFile,#True)
  PDF::EnableFooter(#PDFFile,#True)
  PDF::SetPageNumbering(#PDFFile,#True)
  PDF::AddPage(#PDFFile)
  PDF::SetPosX(#PDFFile,10)
  For i = 33 To 1000
    PDF::Cell(#PDFFile,Chr(i),PDF::GetStringWidth(#PDFFile,Chr(i)),5,0,0,PDF::#LeftAlign)   ;Problemzeile
    If PDF::GetPosX(#PDFFile) > (PDF::GetPageWidth(#PDFFile) - 20)    ;Zeilenumbruch am rechten Rand
      PDF::Ln(#PDFFile,5)
      PDF::SetPosX(#PDFFile,10)
    EndIf
  Next
  PDF::AddPage(#PDFFile)
  PDF::Close(#PDFFile,"Savepdftest.pdf")
  PDF::Save(#PDFFile,"Savepdftest.pdf")
  RunProgram("Savepdftest.pdf")
EndProcedure

runPDF()
Bei Aufruf der Problemzeile erhalte ich die Meldung:

Die MAP hat kein aktuelles Element in folgender Procedure aus Deiner pbi

Code: Alles auswählen

 Procedure.d GetStringWidth_(String.s, Scale.i=#True)
    Define i.i, Width.i, Char.s, vReturn.d

    For i = 1 To Len(String)
      
      Char = Mid(String, i, 1)
      If Asc(Char) > 255
        Width + 600 ; for Unicode characters
      Else
        Width + PDF()\Fonts()\CharWidth(Char)                     ;<<<   Fehler erscheint bei Aufruf dieser Zeile (CodeZeile 1531)
      EndIf
      
    Next
    
    If Scale
      ProcedureReturn (Width * PDF()\Font\Size) / 1000
    Else
      ProcedureReturn Width
    EndIf

  EndProcedure   
  
Erstaunlich ist, der Fehler tritt nur auf, wenn die den Header, so wie oben angezeigt, auskommentiere. Nehme ich den Header wieder dazu, funktioniert der Code ohne Probleme.
(Compiliert mit PB 5.70)

Mache ich da was falsch ?