PurePDF - Probleme mit MultiCell()
- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
PurePDF - Probleme mit MultiCell()
Bei der Verwendung von MultiCell() tritt bei mir ein seltsames Phänomen auf.
Die erzeugten PDFs schauen ganz normal aus, aber wenn man diese dann ausdruckt, werden die Zeilenumbrüche mitgedruckt (Kästchen für unbekanntes Zeichen).
In der ersten Zeile wird ein Chr13 und ein Chr10 gedruckt und in den folgenden Zeilen nur noch ein Chr13.
Wenn ich jetzt aus meinen Text alle Chr13 entferne, wird trotzdem immer noch in der ersten Zeile der Zeilenumbruch (Chr10) in Form eines Kästchens mitgedruckt.
Ich vermute mal, das hier ein Bug vorliegt.
Die erzeugten PDFs schauen ganz normal aus, aber wenn man diese dann ausdruckt, werden die Zeilenumbrüche mitgedruckt (Kästchen für unbekanntes Zeichen).
In der ersten Zeile wird ein Chr13 und ein Chr10 gedruckt und in den folgenden Zeilen nur noch ein Chr13.
Wenn ich jetzt aus meinen Text alle Chr13 entferne, wird trotzdem immer noch in der ersten Zeile der Zeilenumbruch (Chr10) in Form eines Kästchens mitgedruckt.
Ich vermute mal, das hier ein Bug vorliegt.
Re: PurePDF - Probleme mit MultiCell()
Hallo Thorsten,
ich gehe davon aus, dass Du die aktuelle Version 2.19 nimmst. In meinen Projekten hatte ich das Problem mal gehabt. Es lag aber an der alten Version und trat nur beim bestimmten Schrifttyp auf.
Kannst Du uns einen Beispielcode geben?
Häns
ich gehe davon aus, dass Du die aktuelle Version 2.19 nimmst. In meinen Projekten hatte ich das Problem mal gehabt. Es lag aber an der alten Version und trat nur beim bestimmten Schrifttyp auf.
Kannst Du uns einen Beispielcode geben?
Häns
PB 5.6
Windows 7 Professional
Windows 7 Professional
- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Re: PurePDF - Probleme mit MultiCell()
Ich habe versucht die Procedure etwas zu kürzen, da diese recht komplex ist.
Code: Alles auswählen
Procedure.b PDF_Beobachtungen(Sid.l)
;{ ========== StartPDFDoc ==========
pdf_Create("P", "mm", #PDF_PAGE_FORMAT_A4)
; pdf_SetProcHeader(@PDF_SchuelerHeader())
pdf_SetDisplayMode(#PDF_ZOOM_FULLWIDTH)
pdf_SetTitle("Beobachtungen")
pdf_SetSubject("Beobachtungen zu dem Schüler")
pdf_SetAuthor("KvGS - (c) Thorsten Hoeppner")
pdf_SetTopMargin(15)
pdf_SetLeftMargin(25)
pdf_SetRightMargin(15)
pdf_SetAutoPageBreak(1,20)
pdf_SetFillColor(200)
;} ==============================
If OpenDatabaseSQLite(#DBKlasse, KLDaten\dbfile) ; Datenbank öffnen
;{ --- Schülername auslesen ---
If DatabaseTableQuery(#DBKlasse, "SELECT vname, name FROM schueler WHERE sid = "+Str(Sid)+";")
If FirstDatabaseRow(#DBKlasse)
SchuelerName = GetDatabaseString(#DBKlasse, 0) + " " + GetDatabaseString(#DBKlasse, 1)
EndIf
FinishDatabaseQuery(#DBKlasse)
EndIf ;}
pdf_AddPage()
pdf_Ln(3)
If DatabaseTableQuery(#DBKlasse, "SELECT datum, titel, bem, wert, fid FROM beobachtung WHERE sid = "+Str(Sid)+" ORDER BY datum DESC;")
Row = 0
pdf_SetFont("Arial", "B", 12) : pdf_Cell(170, 5.6, "Beobachtungen", 1, 1, #PDF_ALIGN_CENTER, 1)
While NextDatabaseRow(#DBKlasse)
pdf_SetFont("Arial", "B", 8)
pdf_Cell(18, 4.6, Datum(GetDatabaseString(#DBKlasse, 0))+" ", 1, 0, #PDF_ALIGN_RIGHT) ; Datum
pdf_Cell(115, 4.6, " "+GetDatabaseString(#DBKlasse, 1), 1, 0, #PDF_ALIGN_LEFT) ; Titel
; pdf_Cell(37, 4.6, Fach(GetDatabaseLong(#DBKlasse, 4), #AF_name), 1, 1, #PDF_ALIGN_CENTER)
pdf_SetFont("Arial", "", 8)
; ==== Hier tritt das Problem auf ====
Text$ = GetDatabaseString(#DBKlasse, 2)
If Trim(Text$)
pdf_MultiCell(170, 4.4, Text$ , 1)
EndIf
; ====================================
Wend
FinishDatabaseQuery(#DBKlasse)
pdf_Ln(3)
EndIf
CloseDatabase(#DBKlasse)
EndIf
; ========== EndPDFDoc ==========
pdf_Save(KvGS\dir+"ausgabe.pdf")
; ==============================
EndProcedure
Re: PurePDF - Probleme mit MultiCell()
Hallo Thorsten,
ich musste deine Procedure etwas umschreiben, damit ich sie bei mir direkt nachvollziehen konnte:
Bei der Ausgabe habe ich keinen Fehler entdeckt. Ich vermute eher, dass das Problem der Darstellung im PDF-Browser steckt (ich benutze PDF-Creator).
Hast Du mal mit einem anderen Browser ausprobiert?
Häns
ich musste deine Procedure etwas umschreiben, damit ich sie bei mir direkt nachvollziehen konnte:
Code: Alles auswählen
;{ ========== StartPDFDoc ==========
pdf_Create("L", "mm", #PDF_PAGE_FORMAT_A4)
; pdf_SetProcHeader(@PDF_SchuelerHeader())
pdf_SetDisplayMode(#PDF_ZOOM_FULLWIDTH)
pdf_SetTitle("Beobachtungen")
pdf_SetSubject("Beobachtungen zu dem Schüler")
pdf_SetAuthor("KvGS - (c) Thorsten Hoeppner")
pdf_SetTopMargin(15)
pdf_SetLeftMargin(25)
pdf_SetRightMargin(15)
pdf_SetAutoPageBreak(1, 20)
pdf_SetFillColor(200)
;} ==============================
; If OpenDatabaseSQLite(#DBKlasse, KLDaten\dbfile) ; Datenbank öffnen
; ;{ --- Schülername auslesen ---
; If DatabaseTableQuery(#DBKlasse, "SELECT vname, name FROM schueler WHERE sid = "+Str(Sid)+";")
; If FirstDatabaseRow(#DBKlasse)
; SchuelerName = GetDatabaseString(#DBKlasse, 0) + " " + GetDatabaseString(#DBKlasse, 1)
; EndIf
; FinishDatabaseQuery(#DBKlasse)
; EndIf ;}
pdf_AddPage()
pdf_Ln(3)
; If DatabaseTableQuery(#DBKlasse, "SELECT datum, titel, bem, wert, fid FROM beobachtung WHERE sid = "+Str(Sid)+" ORDER BY datum DESC;")
Row = 0
pdf_SetFont("Arial", "B", 12) : pdf_Cell(170, 5.6, "Beobachtungen", 1, 1, #PDF_ALIGN_CENTER, 1)
; While NextDatabaseRow(#DBKlasse)
For i = 1 To 10
pdf_SetFont("Arial", "B", 8)
; pdf_Cell(18, 4.6, Datum(GetDatabaseString(#DBKlasse, 0))+" ", 1, 0, #PDF_ALIGN_RIGHT) ; Datum
pdf_Cell(18, 4.6, FormatDate("%dd.%mm.%yy", Date()) + " ", 1, 0, #PDF_ALIGN_RIGHT) ; Datum
; pdf_Cell(115, 4.6, " "+GetDatabaseString(#DBKlasse, 1), 1, 0, #PDF_ALIGN_LEFT) ; Titel
pdf_Cell(115, 4.6, " " + Str(i), 1, 0, #PDF_ALIGN_LEFT) ; Titel
; pdf_Cell(37, 4.6, Fach(GetDatabaseLong(#DBKlasse, 4), #AF_name), 1, 1, #PDF_ALIGN_CENTER)
pdf_SetFont("Arial", "", 8)
; ==== Hier tritt das Problem auf ====
; Text$ = GetDatabaseString(#DBKlasse, 2)
Text$ = " Test " + #CRLF$ ; <-- ABSICHT!!
If Trim(Text$)
pdf_MultiCell(170, 4.4, Text$, 1)
EndIf
; ====================================
; Wend
; FinishDatabaseQuery(#DBKlasse)
pdf_Ln(3)
Next
; EndIf
; CloseDatabase(#DBKlasse)
; EndIf
; ========== EndPDFDoc ==========
; pdf_Save(KvGS\dir+"ausgabe.pdf")
If pdf_GetErrorCode() > -1
pdf_Save("ausgabe.pdf")
Else
MessageRequester("Fehler PDF", "Das Erstellen einer PDF-Datei konnte nicht ausgeführt werden!" + #CRLF$ + #CRLF$ + pdf_GetErrorMessage())
EndIf
If RunProgram ("ausgabe.pdf")
Else
MessageRequester("Fehler!", "Der Ausdruck war nicht erfolgreich!", #MB_ICONWARNING)
EndIf
; ==============================
Bei der Ausgabe habe ich keinen Fehler entdeckt. Ich vermute eher, dass das Problem der Darstellung im PDF-Browser steckt (ich benutze PDF-Creator).
Hast Du mal mit einem anderen Browser ausprobiert?
Häns
PB 5.6
Windows 7 Professional
Windows 7 Professional
- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Re: PurePDF - Probleme mit MultiCell()
Mit dem Acrobat Reader X funktioniert es.
Re: PurePDF - Probleme mit MultiCell()
Hallo Thorsten,
ich habe mal in die PDF-Refenz geschaut und es hat sich herausgestellt, daß PurePDF die Escape-Sequenzen spezifikationsgetreu umsetzt. Seite 15 (23/756) PDF32000_2008.pdf)
Ich kann natürlich als workaround die Funktion ipf_Cell() so modifizieren, daß die letzten beiden Zeichen (wenn CR oder LF) entfernt werden.
Aber ich empfehle dir natürlich, und auch weil es einfacher ist, die unnötigen Zeichen selber herauszufiltern.
Gruss Klaus
ich habe mal in die PDF-Refenz geschaut und es hat sich herausgestellt, daß PurePDF die Escape-Sequenzen spezifikationsgetreu umsetzt. Seite 15 (23/756) PDF32000_2008.pdf)
Code: Alles auswählen
pdf_MultiCell(170, 4.4, "Zeilenumbruch"+#CRLF$+"Neue Zeile", 1)
Code: Alles auswählen
Procedure ipf_Cell(w.f,h.f=0,Text$="",Border.w=0,Ln.f=0,Align$="",Fill.f=0,Link.w=0)
;Output a cell
Protected l_k.f
Protected l_x.f
Protected l_y.f
Protected l_ws.f
Protected l_s.s
Protected l_op.s
Protected l_dx.f, wmax.f, wlink.f
Protected l_txt.s
Protected TextLen.f
Protected eText$
If Right(Text$,1)=Chr(10)
Text$=Mid(Text$,1,Len(Text$)-1)
EndIf
If Right(Text$,1)=Chr(13)
Text$=Mid(Text$,1,Len(Text$)-1)
EndIf
Gruss Klaus
Zuletzt geändert von ABBKlaus am 18.02.2011 18:01, insgesamt 1-mal geändert.
PureBasicPower TailBite Printer_Lib / PDFBarcode / PrintBarcode / ExcelWriter
- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Re: PurePDF - Probleme mit MultiCell()
Ich habe gerade auch noch den FoxitReader getestet und der druckt auch anstandslos.
Um welche Escapesequenzen handelt es sich, damit ich das Problem an die Macher des "PDF-XChange Viewer" melden kann.
Danke,
Thorsten
Um welche Escapesequenzen handelt es sich, damit ich das Problem an die Macher des "PDF-XChange Viewer" melden kann.
Danke,
Thorsten
Re: PurePDF - Probleme mit MultiCell()
vermutlich sind es diese :
Code: Alles auswählen
\n - LINE FEED (0Ah) (LF)
\r - CARRIAGE RETURN (0Dh) (CR)
\t - HORIZONTAL TAB (09h) (HT)
\b - BACKSPACE (08h) (BS)
\f - FORM FEED (FF)
PureBasicPower TailBite Printer_Lib / PDFBarcode / PrintBarcode / ExcelWriter