Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Workshops / PDF / Papierformat

Orientation- und PaperSize-Eigenschaften

Historie
24.03.2005Erweiterung um LeftMargin und TopMargin
04.03.2005Erste Version

Papierformate nach DIN

Abmessungen des PDF-Dokuments

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.

Points - Umrechnung von Größeneinheiten

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.

Die DIN Norm der A-Serie

Das berühmte Papierformat A4 und co. ist weltweit bekannt (nur Nordamerika kocht (noch?) ein eigenes Süppchen). Es beruht auf folgende Festlegungen:

  1. DIN A0 hat eine Fläche von 1 Quadratmeter.
  2. Wird ein DIN A-Blatt halbiert (die längere Seite wird geteilt), so entsteht ein Blatt des nächstkleineren DIN A-Formats.
  3. Das Seitenverhältnis (kurze/lange Seite) bleibt konstant, was das Seitenverhältnis 1 zu 1.41 (Quadratwurzel von 2) impliziert.

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.

Code/Quelltext

PaperSize - PDF-Dokumente in (fast) beliebiger Größe

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: Grins!

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.

Orientation - PDF-Dokumente im Querformat

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

LeftMargin, TopMargin - PDF-Dokumente mit Abstand

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