[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.
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 »

Update: PDF::GetStringHeight() added
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 »

Hallo Thorsten1867,

erstmal vielen Dank für die tolle Arbeit die Du hier leistest. :bounce:

Wie ich sehe hast Du seit meinem letzten Post das Modul wieder erheblich erweitert, u.a. auch eine Unicode Zeichenunterstützung eingebaut. Ich habe folgendes versucht:

Code: Alles auswählen

    PDF::Cell(#PDF, "نشوان عبد الرزاق عبد الب" + Chr(Asc("ا"))+" " + Chr(Asc("ق"))+ " " + Chr(Asc("ي")),20,10,#False,PDF::#Right,"",#False)
Ich habe "Arial" verwendet, da dieser Font einen erweiterten Zeichensatz enthält.

Ich habe testhalber auch einmal ein arabischen Font (Amiri) versucht

Code: Alles auswählen

    PDF::EmbedFont(#PDF,"Amiri","","")
    PDF::SetFont(#PDF, "Amiri","B", 16)
    PDF::Cell(#PDF, "نشوان عبد الرزاق عبد الب" + Chr(Asc("ا"))+" " + Chr(Asc("ق"))+ " " + Chr(Asc("ي")),20,10,#False,PDF::#Right,"",#False)
Leider erhalte ich immer nur ???? als Ausgabe.
Habe ich da ein Denkfehler?
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 »

Update: Konvertierung inkompatibler PNGs
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: [Module] pbPDF-Module

Beitrag von gnaps »

Hallo,

bin gerade am testen mit dem pbPDF-Module

Wie kann ich die Schriftart auf zb. Verdana umstellen ?
bzw andere Schriftarten ?

Gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: [Module] pbPDF-Module

Beitrag von gnaps »

Hi,

wer die Anleitung lesen kann ist klar im Vorteil.

jedoch gehts nicht

PDF::EmbedFont(#PDF,"C:\WINDOWS\FONTS\VERDANA.TTF","Verdana")

was mache ich falsch ?

Gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
Morty
Beiträge: 268
Registriert: 22.10.2004 07:20
Wohnort: Erfurt
Kontaktdaten:

Re: [Module] pbPDF-Module

Beitrag von Morty »

Hallo Thorsten,

nach längerer Zeit habe ich mich mal wieder Deinem PDF Modul gewidmet. Ich bin immer noch stark beeindruckt. Gutes Modul, super umgesetzt :D :allright:

Ich würde aber nicht schreiben, wenn es da nicht was gäbe. Und zwar funktioniert bei mir Header & Footer nicht. Diese werden auf der PDF einfach nicht angezeigt / berücksichtigt. Als Beispielcode nehme ich einfach mal das beiliegende Beispiel für PageFormat (pbPDF-PageFormat.pb). Die bei mir erstellte PDF hat weder Header noch Footer. Seltsam :freak:

Meine Specs:
PureBasic: 5.72 - 32 Bit (auf 64 Bit OS)
OS: Windows 7 - 64 Bit

Wäre cool, wenn Du da mal schauen könntest.

Gruß,
Morty
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 Thorsten,

der Beitrag von Morty ist jetzt fast 1 Jahr her. Konntest Du schon einmal in Deinem Code nachsehen?
Ohne Header und Footer ist es nicht wirklich Möglich sinnvoll Formulare mit Folgeseiten zu erstellen. Bin gerade dabei ein Update für mein Programm zu schreiben und wollte mal wieder auf Deine Resource zurück greifen und jetzt habe ich das gleiche Problem wie Morty

By the way: alle Module waren bislang eine wirklich tolle Umsetzung :allright:
Wissen schadet nur dem, der es nicht hat !
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: [Module] pbPDF-Module

Beitrag von Lord »

Hallo!

Ohne jetzt wirklich Ahnung zu haben, benutze ich das pbPDF-Modul ebenfalls seit
langer Zeit. Ich bin halt ein Universaldilletant.
Jedoch funktioniert bei mir das Setzen von Header und Footer problemlos. Ich er-
innere mich zwar dunkel, daß ich damals lange tüfteln mußte, bis es so lief, wie
ich es mir dachte.
Es geht aber jetzt immer noch problemlos mit PB 6.00 Alpha 3(x64) und dem ASM-
Backend als Compiler. Das C-Backend bereitet mir noch große Probleme. Da will
ich aber die nächsten(n) Alpha-(und dann Beta-)Versionen abwarten.

Ich habe zwei Proceduren definiert:

Code: Alles auswählen

Procedure Header()
  pdf_SetFont("MS Sans Serif Standard","B",14)
  pdf_SetY(Rand\ro)
  pdf_Cell(0,16, FormatString(Rand\HT),#PDF_CELL_BOTTOMBORDER,0,#PDF_ALIGN_CENTER)
  pdf_SetY(Rand\ro +24)
EndProcedure
Procedure Footer()
   pdf_SetFont("MS Sans Serif Standard","",10)
   pdf_SetY(Rand\ru-Rand\FH)
  pdf_Cell(0,rand\FH,FormatString(Rand\FT),#PDF_CELL_TOPBORDER,0,#PDF_ALIGN_RIGHT)
EndProcedure
Diese werden im Rahmen der PDF-Initialisierung von mir so aufgerufen:

Code: Alles auswählen

  If Rand\HS
    pdf_SetProcHeader(@Header())
  EndIf
  If Rand\FS
    pdf_SetProcFooter(@Footer())
  EndIf
Ich meine mich aber dunkel erinnern zu können, daß das Einbinden von Header
und Footer an der richtigen Position im Code stehen muß. Das ganze ist aber schon
7 Jahre her. Die PDF-Erstellung fasse ich auch nicht mehr an solange es funktioniert.
Die grobe Reihenfolge der Initialisierung sieht etwa so bei mir aus:

Code: Alles auswählen

pdf_Create
pdf_SetDisplayMode
pdf_DisplayPreferences
pdf_AliasNbPages
pdf_SetTitle
pdf_SetSubject
pdf_SetCreator
pdf_SetAutoPageBreak
pdf_SetMargins
pdf_SetFont
pdf_SetProcHeader
pdf_SetProcFooter
pdf_SetProcCompression
pdf_AddPage
...
...
Ich hoffe, zumindest einen Ansatz für eine Fehlersuche geliefert zu haben.
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 »

@Lord
So nebenbei bemerkt, gemessen an Deinem hier ausgegebenen Code arbeitest Du mit einer älteren Version, was OK ist. Ich schätze mal die PBI heißt "purePDFModule.pbi".
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 »

Auch wenn es ein Doppelpost wird, ich habe die Lösung für die Anzeige von Kopf und Fußzeilen gefunden.

Es ist direkt nach dem Create die Kopf und Fußzeile einzuschalten. Laut Dokumentation sollte das automatisch funktionieren. Da ist wohl noch ein Bug drin. So konnte ich das lösen:

Code: Alles auswählen

XIncludeFile ".\pbPDFModule.pbi"

#PDFFILE = 1
Procedure Header()
    PDF::SetFont(#PDFFILE,"Arial","I",8)
    PDF::SetColorRGB(#PDFFILE,PDF::#TextColor,127,255,127)  
    PDF::Cell(#PDFFILE,"Header",#False,8,#False,PDF::#NextLine,PDF::#CenterAlign,#False,"")
    PDF::Ln(20)
EndProcedure

Procedure Footer()
    PDF::SetPosY(#PDFFILE,-20,#False)
    PDF::SetFont(#PDFFILE,"Arial","I",8)
    PDF::SetColorRGB(#PDFFILE,PDF::#TextColor,127,0,127)  
    PDF::Cell(#PDFFILE,"Dies ist eine Fußzeile mal ohne Angabe von Seitenzahlen",#False,8,#False,PDF::#NextLine,PDF::#CenterAlign,#False,"")
EndProcedure

 If PDF::Create(#PDFFILE);,"P","mm",PDF::#Format_A4)
; ===== General Settings =====
    PDF::EnableHeader(#PDFFILE,#True)
    PDF::EnableFooter(#PDFFILE,#True)
    PDF::SetAutoPageBreak(#PDFFILE,#True)
    PDF::SetPageNumbering(#PDFFILE,#True)
; ===== Meta Settings =====
    PDF::SetInfo(#PDFFILE,PDF::#Author,"Author Name")
    PDF::SetInfo(#PDFFILE,PDF::#Title,"Document Title")
    PDF::SetInfo(#PDFFILE,PDF::#Subject,"Document Subject")
    PDF::SetInfo(#PDFFILE,PDF::#Keywords,"Document Keywords")
    PDF::SetInfo(#PDFFILE,PDF::#Creator,"Who has written this document")
; ===== File Control =====    
    PDF::SetHeaderProcedure(#PDFFILE,@Header())
    PDF::SetFooterProcedure(#PDFFILE,@Footer())
; ===== File content =====    
    PDF::AddPage(#PDFFILE)
    PDF::SetFont(#PDFFILE,"Arial","",10)
    PDF::SetColorRGB(#PDFFILE,PDF::#TextColor,127,127,127)  
    PDF::Cell(#PDFFILE,"Hier beginnt das Formular",#False,8,#False,PDF::#NextLine,PDF::#CenterAlign,#False,"")
    PDF::AddPage(#PDFFILE)
    PDF::SetColorRGB(#PDFFILE,PDF::#TextColor,227,227,227)  
    PDF::Cell(#PDFFILE,"Hier beginnt das Formular Seite 2",#False,8,#False,PDF::#NextLine,PDF::#CenterAlign,#False,"")
    PDF::AddPage(#PDFFILE)
    PDF::SetColorRGB(#PDFFILE,PDF::#TextColor,27,27,27)  
    PDF::Cell(#PDFFILE,"Hier beginnt das Formular Seite 3",#False,8,#False,PDF::#NextLine,PDF::#CenterAlign,#False,"")
; ===== Finalize Document =====    
    PDF::Close(#PDFFILE,"test.pdf")
    RunProgram("test.pdf")
  EndIf
Good Luck
Wissen schadet nur dem, der es nicht hat !
Antworten