Seite 6 von 7

Re: [Module] pbPDF-Module

Verfasst: 28.07.2021 15:58
von HeX0R
Wenn man die Header/Footer Prozeduren übergibt, kann man eigentlich davon ausgehen, dass man die auch nutzen möchte.
Von daher würde ich empfehlen die beiden Prozeduren wie folgt abzuändern:

Code: Alles auswählen

Procedure SetFooterProcedure(ID.i, *ProcAddress, *StructAddress=#Null)

  If FindMapElement(PDF(), Str(ID))
    PDF()\Footer\ProcPtr  = *ProcAddress
    PDF()\Footer\StrucPtr = *StructAddress
    PDF()\Footer\Flag     = #True
  EndIf

EndProcedure   

Procedure SetHeaderProcedure(ID.i, *ProcAddress, *StructAddress=#Null)

  If FindMapElement(PDF(), Str(ID))

    PDF()\Header\ProcPtr  = *ProcAddress
    PDF()\Header\StrucPtr = *StructAddress
    PDF()\Header\Flag     = #True
      
  EndIf
  
EndProcedure
Dann kann man sich das doppelt gemoppelte EnableHeader/Footer sparen.

Re: [Module] pbPDF-Module

Verfasst: 28.07.2021 16:21
von MenschMarkus
Das ist in der Tat besser :allright:

Danke fürs drüberschauen.

Re: [Module] pbPDF-Module

Verfasst: 29.07.2021 12:03
von Lord
MenschMarkus hat geschrieben: 28.07.2021 12:25 @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".
Nein, ich nutze (immer noch) die PurePDF.pb V2.26 von Normeus.
Diese macht in meinem Programm das, was sie soll. Deshalb werde
ich das auch wohl nicht mehr ändern.

Re: [Module] pbPDF-Module

Verfasst: 02.08.2021 11:53
von MenschMarkus
Ich bin da auf ein neues Problem gestoßen,

leider funktioniert das Footer Margin nicht richtig. Auch wenn ich den Y Versatz angebe, wird der Inhaltstext über die Fußzeile drüber gedruckt.

Hier mal Header und Footer Prozeduren

Code: Alles auswählen

Procedure PDFHeader()
  If PDF::GetPageNumber(#PDFFILE) = 1
    PDF::Image(#PDFFILE,".\Logo.jpg",165,5,36,10)
    PDF::SetFont(#PDFFILE,"Arial","B",14)
    PDF::SetColorRGB(#PDFFILE,PDF::#TextColor,127,127,127)  
    PDF::Cell(#PDFFILE,"Seitentitel",#False,8,#False,PDF::#NextLine,PDF::#CenterAlign,#False,"")
    PDF::Cell(#PDFFILE,"Dokumenten ID: [to be filled] ",#False,8,#False,PDF::#NextLine,PDF::#CenterAlign,#False,"")
  Else
    PDF::Image(#PDFFILE,".\Logo.jpg",165,5,36,10)    
  EndIf
EndProcedure

Procedure PDFFooter()
    PDF::SetFont(#PDFFILE,"Arial","I",8)
    PDF::SetPosY(#PDFFILE,-15)				;wird in der PDF Datei nicht umgesetzt !
    PDF::SetColorRGB(#PDFFILE,0,127,127,127)  
    PDF::Cell(#PDFFILE,"Hier der Text meiner Fußzeile",#False,8,#False,PDF::#NextLine,PDF::#CenterAlign,#False,"")
EndProcedure
Kann das jemand bestätigen?

Re: [Module] pbPDF-Module

Verfasst: 02.08.2021 20:48
von Andesdaf
Wie sieht denn dein SetAutoPageBreak()-Aufruf aus?

Re: [Module] pbPDF-Module

Verfasst: 04.08.2021 09:45
von MenschMarkus
andesdaf hat geschrieben:Wie sieht denn dein SetAutoPageBreak()-Aufruf aus?

Code: Alles auswählen

PDF::SetAutoPageBreak(#PDFFILE,#True)
Es ist aber egal ob ich #True oder #False setze. Es ändert nichts am Ignorieren des Fußzeilenabstandes. /:->

Edit:
Ich sehe gerade, Beim Autopagebreak muss ich noch einen Margin Wert eingeben. Das war mir neu. OK vielleicht sollte man doch manchmal die Anleitung etwas genauer lesen <) . Der Gedankenanstoß war gut Andesdaf. Danke :allright:

Re: [Module] pbPDF-Module

Verfasst: 18.08.2021 15:26
von matlab
Liebe Alle, ein wenig verzweifelt versuche ich unter Nutzung des tollen pdPDF-Module von Thorsten1867 Unicode-Schriften in das PDF einzubinden, um in der Ausgabe z.B. auch den kyrillische Zeichensatz (U+0400 bis U+04FF) - auch in italic und bold - nutzen zu können.

Ich habe es mit den Standardfonts (z.B. Arial) versucht, jedoch auch mit anderen True-Type-Fonts, die laut dp4fontviewer32 Unicode unterstützen und Glyphen für Kyrillisch beinhalten. Das Beispiel von Thorsten1867 funktioniert, jedoch gibt es für diesen Font keine Schnitte in italic oder bold. Folgende Probleme stellen sich regelmäßig ein:

1. Vor jeden String wird ein kleines Viereck oder schwarzes Viereck mit einem weißen Kreuz gesetzt und

2. zumindest der Adobe Acrobat Pro (bei anderen Viewern - z.B. SumatraPDF - ist das nicht so) gibt folgende Meldung aus: "In der Schrift [hier der Schriftname] ist der Wert für /Flags fehlerhaft"

Bild

Bild

3. Als Nebeneffekt ist mir noch aufgefallen, dass PDF::Bookmark nicht Unicode unterstützt (oder ich weiß nicht, wie). Hier werden die kyrillischen Zeichen als Fragezeichen ausgegeben.

Hier ein Beispielprogramm (font ArialMT (arial.ttf und Schnitte )sowie das Beispielprogramm in den Ordner Examples von pbPDF-Module kopieren)

Ich würde mich freuen, wenn jemand hierzu eine Idee hätte. Mir fällt jedenfalls nichts mehr ein. Danke!

Code: Alles auswählen

XIncludeFile "..\pbPDFModule.pbi"

Define.s Path2Font=""
Define.s Font="ArialMT-"
Define.s File=Font+"pbPDF-EmbedFont.pdf"
Define.s String=" <- "
Define.i i

For i=$0400 To $0410 ;testweise ein paar kyrillische Zeichen
  String=String+Chr(i)
Next i

#PDF = 1

If PDF::Create(#PDF)
  
  PDF::AddPage(#PDF)
   
  Debug PDF::EmbedFont(#PDF, Path2Font+"arial.ttf", "ArialMT", "", PDF::#Unicode)
  Debug PDF::EmbedFont(#PDF, Path2Font+"ariali.ttf", "ArialMT", "I", PDF::#Unicode)
  Debug PDF::EmbedFont(#PDF, Path2Font+"arialbd.ttf", "ArialMT", "B", PDF::#Unicode)
  Debug PDF::EmbedFont(#PDF, Path2Font+"arialbi.ttf", "ArialMT", "BI", PDF::#Unicode) 
  
  PDF::SetFont(#PDF,"ArialMT", "", 14)
  PDF::PlaceText(#PDF,Font+"Regular"+String, 10, 20) 
  PDF::SetFont(#PDF, "ArialMT", "I", 14)
  PDF::PlaceText(#PDF, Font+"Italic"+String, 10, 30)
  PDF::SetFont(#PDF, "ArialMT", "B", 14)
  PDF::PlaceText(#PDF, Font+"Bold"+string, 10, 40)
  PDF::SetFont(#PDF, "ArialMT", "BI", 14)
  PDF::PlaceText(#PDF, Font+"BoldItalic"+String, 10, 50)
  
  PDF::BookMark(#PDF, "Bookmark"+string, 0, #PB_Default, #PB_Default)
   
  PDF::Close(#PDF, File)
  
EndIf

RunProgram(File)
/code]

Re: [Module] pbPDF-Module

Verfasst: 14.09.2021 16:42
von matlab
Leider gab es ja für mein oben geschildertes Problem bisher keine grundsätzliche Lösung, jedoch habe ich - letztlich durch Testen verschiedener Fonts - einen Font mit mehreren Schnitten gefunden, der zumindest für mich funktioniert.

PT Sans in der Version 2.005 von Paratype (frei auf paratype.com verfügbar) stellt die Unicodezeichen ohne vorangestelltes Quadrat/Kreuz dar. Der Fehler mit dem Hinweis auf fehlerhafte Eintrage bei "/Flags" beim Aufruf mit Adobe-Viewern stört mich nicht, da er in dem von mir genutzten Viewer (SumatraPDF mit Kommandozeilenoptionen) nicht auftritt und sich so die erstellten Dokumente ohne Fehlermeldung ausdrucken lassen.

Re: [Module] pbPDF-Module

Verfasst: 28.03.2022 08:59
von MenschMarkus
Habe mich situationsbedingt noch einmal intensiver mit dem PDF Modul beschäftig und mich um das Schriftenproblem gekümmert.( siehe hier ).
Mittlerweile bin ich auch dahinter gekommen warum ich keine Schriften einbetten konnte bzw diese nicht verwendet wurden.
Das Problem lag schlicht und ergreifend daran, dass das Einlesen des TTF Fonts fehlgeschlagen ist, da das System bzw. eine App die Datei bereits in Beschlag genommen hat. Um dieses Problem zu lösen habe ich eine kleine Ergänzung im Modul Source Code vorgenommen.
In der Procedure FileHeaderTTF_() wird zu Beginn das Font File mit ReadFile() geöffnet.
Hier wäre das

Code: Alles auswählen

    If ReadFile(#File, FileName)
durch ein

Code: Alles auswählen

    If ReadFile(#File, FileName,#PB_File_SharedRead)
zu ersetzen und so wäre zumindest dieses Problem schon einmal gelöst.
Das Font wird korrekt eingebettet und die im Font eingebetteten nicht lateinischen Schriftzeichen werden jetzt korrekt dargestellt.

Re: [Module] pbPDF-Module

Verfasst: 03.05.2024 18:16
von Thorsten1867
Bugfix: Unicode-Fonts