Also, ich hab den "DynamicPDF Generator for .NET" von cete Software, zu finden unter
http://www.cete.com/Products/GeneratorForNET . Die Community Edition ist gratis, hat aber eingeschränkte Features. Und so sieht mein Code aus (gekürzt, ist so nicht konsistent):
CODE Try
‘ diverse Berechnungen basierend auf den Eingaben
...
Dim ctl As Control
For Each ctl In Me.Controls
ctl.Visible = False
Next
‘Daten aus DB holen
...
Dim dr As DataRow = ds.Tables("Daten").Rows(0)
If Not dr Is Nothing Then
Dim oDoc As Document = New Document()
Dim oPage As ceTe.DynamicPDF.Page = New ceTe.DynamicPDF.Page(PageSize.A4, PageOrientation.Landscape, 42)
oPage.Dimensions.BottomMargin = 29
''seitenränder sichtbar machen
'Dim oRect As New PageElements.Rectangle(0, 0, oPage.Dimensions.Body.Width, oPage.Dimensions.Body.Height)
'oRect.BorderColor = Color.Blue
'oRect.BorderStyle = LineStyle.Solid
'oRect.BorderWidth = 1
'oRect.Apply = Apply.Stroke
'oPage.Elements.Add(oRect)
‘Layout
Dim iWidthPage As Integer = CInt(oPage.Dimensions.Body.Width)
Dim iHeightPage As Integer = CInt(oPage.Dimensions.Body.Height)
Dim iLeftCaptions As Integer = 0
Dim iLeftDaten As Integer = 190
Dim iTopTitel As Integer = 0
Dim iTopDaten As Integer = 70
...
Dim lbl As ceTe.DynamicPDF.PageElements.Label
lbl = New Label(DBtoString(dr("Data1")), iLeftCaptions, iTopTitel, iWidthCaptions, iHeightTitel, fFont, iSizeCaption, TextAlign.Right)
lbl.VAlign = VAlign.Center
oPage.Elements.Add(lbl)
lbl = New Label(Me.GetLabel("Data2"), iLeftCaptions, iTopDaten, iWidthCaptions, iHeightNormal, fFont, iSizeCaption, TextAlign.Right)
lbl.VAlign = VAlign.Center
oPage.Elements.Add(lbl)
lbl = New Label(Me.GetLabel("Data3"), iLeftCaptions, iTopOpt, iWidthCaptions, iHeightNormal, fFont, iSizeCaption, TextAlign.Right)
lbl.VAlign = VAlign.Center
oPage.Elements.Add(lbl)
...
lbl = New Label("URL", 500, iHeightPage - 20, iWidthPage - 500, 20, fFont, 12)
lbl.Align = TextAlign.Right
lbl.VAlign = VAlign.Bottom
lbl.TextColor = New RGBColor(0, 51, 153)
oPage.Elements.Add(lbl)
Dim ln As New Line(0, iTopDaten - 10, iWidthPage, iTopDaten - 10, 1, Color.Black, LineStyle.Solid)
oPage.Elements.Add(ln)
ln = New Line(0, iTopOpt - 10, iWidthPage, iTopOpt - 10, 1, Color.Black, LineStyle.Solid)
oPage.Elements.Add(ln)
‘für Debug : Rahmen um alle Elemente
Dim oEl As PageElement
Dim oL As Label
Dim oTA As TextArea
Dim oGrp As New Group()
For Each oEl In oPage.Elements
If (TypeOf oEl Is Label) Then
oL = CType(oEl, Label)
oGrp.Add(New Rectangle(oL.X, oL.Y, oL.Width, oL.Height, Color.Orange, 1, LineStyle.Solid))
ElseIf (TypeOf oEl Is TextArea) Then
oTA = CType(oEl, TextArea)
oGrp.Add(New Rectangle(oTA.X, oTA.Y, oTA.Width, oTA.Height, Color.Red, 1, LineStyle.Solid))
End If
Next
'oPage.Elements.Add(oGrp)
'oPage.Elements.Add(New LayoutGrid())
oDoc.Pages.Add(oPage)
oDoc.Draw(Me) 'normal
'odoc.Draw(Me, "helloworld.pdf", True) 'ohne browserfenster, nur acrobat
End If ' no data
Catch ex As Exception
Trace.Warn(ex.ToString)
End Try
Griessli
Irene