Kontakt
DSVGO
Historie | |
---|---|
24.03.2005 | Erweiterung um LeftMargin und TopMargin |
04.03.2005 | Erste Version |
Im "Trailer" des PDF-Streams wird die Größe des Ausgabemediums spezifiziert, indem einfach die konkrete Breite und Höhe in Points angegeben wird. Soll ein Text im Querformat erscheinen, so wird das Ausgabemedium eben breiter (und weniger hoch) spezifiziert.
Die vor allem beim Schriftsatz verwendete Größeneinheit "Points" ist definiert als 1/72 Inch, wobei 1 Inch gerade 2,54 Zentimeter entspricht. Eine typische Schreibmaschine etwa benutzt eine 12 Points-Schrift, also beträgt die Höhe einer Zeile dann 4,233 Millimeter.
Das berühmte Papierformat A4 und co. ist weltweit bekannt (nur Nordamerika kocht (noch?) ein eigenes Süppchen). Es beruht auf folgende Festlegungen:
Durch diese Beschreibung ist mathematisch eindeutig definiert, wie groß tatsächlich etwa ein A4-Blatt sein muss. Da ein DIN A0-Blatt ca. 1189mm x 841mm (ergibt 1 Quadratmeter) groß ist, und das DIN A4-Blatt durch vierfache "Halbierung" entsteht, muss dieses also ca. 297mm x 210mm groß sein.
Beim Setzen der PaperSize-Eigenschaft wird genau die o.g. DIN-Definition umgesetzt. Natürlich wird nicht immer wieder die Papiergröße halbiert, bis man das gewünschte Format erhält, sondern gleich der entsprechende Teiler benutzt:
Property Let PaperSize(ByVal Value As pdfPaperSizes) Const A0Width As Integer = 2384 'Points Const A0Height As Integer = 3371 'Points pPaperSize = Value Select Case pPaperSize Case pdfA0: pWidth = A0Width: pHeight = A0Height Case pdfA1: pWidth = A0Height \ 2: pHeight = A0Width Case pdfA2: pWidth = A0Width \ 2: pHeight = A0Height \ 2 Case pdfA3: pWidth = A0Height \ 4: pHeight = A0Width \ 2 Case pdfA4: pWidth = A0Width \ 4: pHeight = A0Height \ 4 Case pdfA5: pWidth = A0Height \ 8: pHeight = A0Width \ 4 Case pdfA6: pWidth = A0Width \ 8: pHeight = A0Height \ 8 Case pdfA7: pWidth = A0Height \ 16: pHeight = A0Width \ 8 End Select End Property
Es werden aber auch "exotische" Formate unterstützt. Dazu können die Breite (Width) und Höhe (Height) des zu erzeugenden PDF-Dokuments gesetzt werden. Wenn dies geschieht, so wird PaperSize automagisch auf pdfUser umgeschaltet, was eben gerade "benutzerdefiniert" bedeutet:
Property Let Height(ByVal Value As Integer) pHeight = Value pPaperSize = pdfUser End Property
Analoges gilt natürlich auch für Width.
Durch eine einfache Fallunterscheidung wird bei der Generierung des PDF-Codes sichergestellt, dass bei Querformat die Angaben für Breite und Höhe vertauscht werden:
Private Sub StreamPDFTrailer() '... StreamLine "/Type /Pages" StreamLine "/Count " & PageCount If pOrientation = pdfPortrait Then StreamLine "/MediaBox [ 0 0 " & pWidth & " " & pHeight & " ]" Else StreamLine "/MediaBox [ 0 0 " & pHeight & " " & pWidth & " ]" End If '... End Sub
Durch eine einfache Fallunterscheidung (Querformat?) wird bei der Generierung des PDF-Codes sichergestellt, dass links und oben ein Rand gelassen wird:
Private Sub StreamPageHeader() '... StreamLine "BT" StreamLine "/F1 " & pFontSize & " Tf" If pOrientation = pdfPortrait Then StreamLine pMarginLeft & " " & pHeight - pMarginTop & " Td" Else StreamLine pMarginLeft & " " & pWidth - pMarginTop & " Td" End If '... End Sub
© Jost Schwider, 04.03.2005-24.03.2005 - http://vb-tec.de/pdf-format.htm