[Module] pbPDF-Module

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Re: [Module] pbPDF-Module

Beitrag von ThoPie »

Hallo, vielen Dank erstmal für deine tolle Arbeit und der Bug-Jägerei in den letzten Tagen.

Code: Alles auswählen

XIncludeFile "Includes\pbPDFModule.pbi"

Enumeration
  #filPDF  
EndEnumeration

Procedure Listenkopf()
  PDF::Cell(#filPDF, "Listenkopf", #PB_Default, 10, 0, 0, PDF::#CenterAlign)  
EndProcedure

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

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()
Allerdings scheint immer noch irgendwo was falsch zu sein.
Beim meinem Echt-Projekt bricht die Anzeige der PDF-Datei bei Seite 2 mit dem Fehler "Fehler auf dieser Seite. Die Seite wird unter Umständen nicht richtig in Acrobat angezeigt. Wenden Sie sich an den Ersteller des PDF-Dokumentes ab."

Bei obigen Beispielcode kommt ein Abbruch in der Prozedur "GetStringWidth_". Die Map hat kein aktuelles Element.

Vielleicht kannst du bei Gelegenheit nochmal drüber schauen.
Vielen vielen Dank.
Bild
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: [Module] pbPDF-Module

Beitrag von Thorsten1867 »

Du kannst keinen Font für ein PDF festlegen, das noch nicht existiert.

(Habe eine neue Fehlermeldung hierfür hinzugefügt.)

Code: Alles auswählen

XIncludeFile "pbPDFModule.pbi"

#PDFFile = 1

If PDF::Create(#PDFFile,"P")
 
  PDF::SetFont(#PDFFile, "Arial", "", 10)  ; <<<< Problemzeile
 
  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)
    If PDF::GetPosX(#PDFFile) > (PDF::GetPageWidth(#PDFFile) - 20) ; Zeilenumbruch am rechten Rand
      PDF::Ln(#PDFFile, 5)
      PDF::SetPosX(#PDFFile, 10)
    EndIf
  Next
  
  PDF::Close(#PDFFile,"Savepdftest.pdf")
EndIf

Debug PDF::GetErrorMessage()

RunProgram("Savepdftest.pdf")
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: [Module] pbPDF-Module

Beitrag von MenschMarkus »

Thorsten1867 hat geschrieben:Du kannst keinen Font für ein PDF festlegen, das noch nicht existiert.

(Habe eine neue Fehlermeldung hierfür hinzugefügt.)

Code: Alles auswählen

 ....

  PDF::SetFont(#PDFFile, "Arial", "", 10)  ; <<<< Problemzeile
....

Debug PDF::GetErrorMessage()

RunProgram("Savepdftest.pdf")
Ah, habe verstanden.
By the way, Ich hatte den Code geschrieben und ggf. Sonderzeichen mit zu verwenden wie z.B. das Summenzeichen ohne den Schrifttyp wechseln zu müssen. Unter Word/Libre Office kann ich mit den ASCII Code Wert ja anzeigen lassen. Leider erscheint bei Eingabe des Characters mit dem ASCII Code, z.B. Chr(931), nur ein "?".
Ich würde mir sogar die Arbeit machen einen erweiterten Data Bereich für z.B. Arial zu erstellen und dann zur Verfügung zu stellen. Ich müsste nur wissen wie ich an die Information komme und wie der Data Bereich aufgebaut sein muss. Da bräuchte ich so eine Initialhilfe.

Danke noch mal für die schnelle Rückantwort auf das Problem.
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: [Module] pbPDF-Module

Beitrag von Thorsten1867 »

MenschMarkus hat geschrieben:By the way, Ich hatte den Code geschrieben und ggf. Sonderzeichen mit zu verwenden wie z.B. das Summenzeichen ohne den Schrifttyp wechseln zu müssen.
Das mit PDF nicht so einfach.
Unter UTF-8 sind z.B. die Zeichen 128 - 160 nicht verfügbar. Und für alles über 255 brauchst du einen eingebetteten Unicode-Zeichensatz.
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: [Module] pbPDF-Module

Beitrag von MenschMarkus »

Thorsten1867 hat geschrieben:
MenschMarkus hat geschrieben:By the way, Ich hatte den Code geschrieben und ggf. Sonderzeichen mit zu verwenden wie z.B. das Summenzeichen ohne den Schrifttyp wechseln zu müssen.
Das mit PDF nicht so einfach.
Unter UTF-8 sind z.B. die Zeichen 128 - 160 nicht verfügbar. Und für alles über 255 brauchst du einen eingebetteten Unicode-Zeichensatz.
Hm, Arial ist halt nett, da es auch arabische Schriftzeichen enthält, die ich bei einem projekt auch benötige. Ich hab den ursprünglichen Code von ABBKlaus eingesetzt. Da hat es ganz gut funktioniert. Was ist mit Unicode, UTF-16 usw?
Lass mich wissen wenn ich was tun kann um Dich dabei zu unterstützen.
Wissen schadet nur dem, der es nicht hat !
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: [Module] pbPDF-Module

Beitrag von MenschMarkus »

Hallo Thorsten1867,

bei der Verwendung Deines Modules (erste Variante der Veröffentlichung) ist mir aufgefallen, dass ich innerhalb des PDF Dokuments nicht nach Worten suchen kann.
Was kann das für Ursachenhaben?
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: [Module] pbPDF-Module

Beitrag von Thorsten1867 »

Möglicherweise ist der Text komprimiert.
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: [Module] pbPDF-Module

Beitrag von MenschMarkus »

Thorsten1867 hat geschrieben:Möglicherweise ist der Text komprimiert.
Erstmal Danke für die rasche Rückantwort.
Kann ich da etwas unternehmen damit die Suchfunktion in der PDF wieder funktioniert, denn ich habe explizit kein Komprimierungsbefehl bei der Erzeugung des PDF gegeben.
Wissen schadet nur dem, der es nicht hat !
babelfish
Beiträge: 57
Registriert: 08.07.2009 10:53

Re: [Module] pbPDF-Module

Beitrag von babelfish »

Hi alle zusammen

Das PDF-Modul ist ziemlich genial ! Danke für deine Arbeit.

Aber ich glaub das (unter OSX ?) etwas mit den Image-Bereich nicht stimmt.

Werden nacheinander 2 Fotos eingebunden mit dem gleichen Dateinamen - aber mit unterschiedlichen Pfad wird immer das erste Bild eingebunden.

Kann das jemand bestätigen - oder sehe ich den Fehler bei mir nicht?

Beispiel:
Setzt 2 verschiedene JPG's eines ins selbe Verzeichnis als das PB und eines in das Verzeichnis "img".
Dann kopiert das Bild in "img" auf AnsichtFoto2.jpg

die ersten 2 Bilder werden gleich angezeigt... das dritte ist unterschiedlich.
Wobei es umgekehrt sein sollte - 1 anders als 2 und 3

Code: Alles auswählen

Define File$="/Volumes/FusionDrive/Users/Bentuzername/Desktop/test.pdf"
XIncludeFile "pbPDFModule.pbi"
#PDF = 1

If PDF::Create(#PDF)
  PDF::AddPage(#PDF)
  PDF::SetPageMargins(#PDF, 0.2, 0.2, 0.2)
  
  PDF::SetFont(#PDF, "LucidaSans", "", 14)
  PDF::PlaceText(#PDF, "test", 20, 8)
  
  
  PDF::Image(#PDF, "AnsichtFoto.jpg", 0, 20, 100  )
  PDF::Image(#PDF, "img/AnsichtFoto.jpg", 0, 120, 100  )
  PDF::Image(#PDF, "img/AnsichtFoto2.jpg", 0, 220, 100  )
  
  
  PDF::Close(#PDF, File$)
EndIf

RunProgram("open", File$,"")

Hauptsächlich Purebasic für OSX
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: [Module] pbPDF-Module

Beitrag von Thorsten1867 »

babelfish hat geschrieben:Hi alle zusammen

Das PDF-Modul ist ziemlich genial ! Danke für deine Arbeit.

Aber ich glaub das (unter OSX ?) etwas mit den Image-Bereich nicht stimmt.

Werden nacheinander 2 Fotos eingebunden mit dem gleichen Dateinamen - aber mit unterschiedlichen Pfad wird immer das erste Bild eingebunden.

Kann das jemand bestätigen - oder sehe ich den Fehler bei mir nicht?

Beispiel:
Setzt 2 verschiedene JPG's eines ins selbe Verzeichnis als das PB und eines in das Verzeichnis "img".
Dann kopiert das Bild in "img" auf AnsichtFoto2.jpg

die ersten 2 Bilder werden gleich angezeigt... das dritte ist unterschiedlich.
Wobei es umgekehrt sein sollte - 1 anders als 2 und 3

Code: Alles auswählen

Define File$="/Volumes/FusionDrive/Users/Bentuzername/Desktop/test.pdf"
XIncludeFile "pbPDFModule.pbi"
#PDF = 1

If PDF::Create(#PDF)
  PDF::AddPage(#PDF)
  PDF::SetPageMargins(#PDF, 0.2, 0.2, 0.2)
  
  PDF::SetFont(#PDF, "LucidaSans", "", 14)
  PDF::PlaceText(#PDF, "test", 20, 8)
  
  
  PDF::Image(#PDF, "AnsichtFoto.jpg", 0, 20, 100  )
  PDF::Image(#PDF, "img/AnsichtFoto.jpg", 0, 120, 100  )
  PDF::Image(#PDF, "img/AnsichtFoto2.jpg", 0, 220, 100  )
  
  
  PDF::Close(#PDF, File$)
EndIf

RunProgram("open", File$,"")

Nachdem die Fotos eingebettet werden, ist der Pfad unerheblich und nur der Dateiname entscheidend.
Zwei Fotos mit dem gleichen Namen können also nicht funktionieren.
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Antworten