Platforms to show: All Mac Windows Linux Cross-Platform
/DynaPDF/DynaPDF Graphics/ListBoxReport
Required plugins for this example: MBS DynaPDF Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /DynaPDF/DynaPDF Graphics/ListBoxReport
This example is the version from Tue, 4th May 2020.
Project "ListBoxReport.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
End Class
Class MainWindow Inherits Window
Control PrintableListBox Inherits ReportDataListBox
ControlInstance PrintableListBox Inherits ReportDataListBox
End Control
Control PrintPreviewButton Inherits PushButton
ControlInstance PrintPreviewButton Inherits PushButton
EventHandler Sub Action()
Dim ps As New PrinterSetup
Dim rpt As New NameReport
If rpt.Run(PrintableListBox, ps) Then
If rpt.Document <> Nil Then
Dim rptWindow As New ReportWindow
rptWindow.RptDoc = rpt.Document
rptWindow.Show
End If
End If
End EventHandler
End Control
Control PrintButton Inherits PushButton
ControlInstance PrintButton Inherits PushButton
EventHandler Sub Action()
Dim ps As New PrinterSetup
Dim rpt As New NameReport
If ps.PageSetupDialog Then
Dim g As Graphics
g = OpenPrinterDialog(ps)
If g <> Nil Then
If rpt.Run(PrintableListBox, ps) Then
If rpt.Document <> Nil Then
rpt.Document.Print(g)
End If
End If
End If
End If
End EventHandler
End Control
Control PDFButton Inherits PushButton
ControlInstance PDFButton Inherits PushButton
EventHandler Sub Action()
Dim pdf As New MyDynapdfMBS
Dim f1 As FolderItem = SpecialFolder.Desktop.Child("DynaPDF Graphics.pdf")
Dim f2 As FolderItem = SpecialFolder.Desktop.Child("DynaPDF Graphics.png")
Dim f3 As FolderItem = SpecialFolder.Desktop.Child("DynaPDF Graphics Rendered.png")
// optionally put a background.pdf on desktop
Dim fi As FolderItem = SpecialFolder.Desktop.Child("background.pdf")
'pdf.SetLicenseKey "Starter" // For this example you can use a Starter, Lite, Pro or Enterprise License
If Not pdf.CreateNewPDF(f1) Then
Return
End If
If fi <> Nil And fi.Exists Then
// ask plugin to ignore clearRect call from Xojo, so we see what's behind report
pdf.ClearRectMode = pdf.kClearRectModeIgnoreBig
Call pdf.OpenImportFile(fi) // needs Lite
Call pdf.ImportPDFPage(1) // needs Pro
If pdf.GetPageCount = 1 Then
// okay
Call pdf.EditPage(1)
Else
// import failed?
Call pdf.Append
End If
Else
Call pdf.Append
End If
Dim g As Graphics = pdf.PageGraphics
Dim rpt As New NameReport
Dim ps As New PrinterSetup
If rpt.Run(PrintableListBox, ps) Then
If rpt.Document <> Nil Then
Dim c As integer = rpt.Document.PageCount
rpt.Document.Print(g)
End If
End If
// for debugging, show temp picture
Dim p As Picture = pdf.PageGraphicsPicture
p.Save(f2, p.SaveAsPNG)
Call pdf.EndPage
If pdf.HasPro Then
Call pdf.RenderPageToImage(1, f3, 150, 0, 0, pdf.krfDefault, pdf.kpxfRGB, pdf.kcfFlate, pdf.kifmPNG)
End If
Call pdf.CloseFile
f1.Launch True
End EventHandler
End Control
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
Class ReportWindow Inherits Window
ComputedProperty RptDoc As Reports.RBReportDocument
Sub Set()
mRptDoc = value
mCurrentPage = 1
ReportCanvas.Invalidate(False)
End Set
Sub Get()
Return mRptDoc
End Get
End ComputedProperty
Control ReportCanvas Inherits Canvas
ControlInstance ReportCanvas Inherits Canvas
EventHandler Sub Paint(g As Graphics, areas() As REALbasic.Rect)
If mRptDoc <> Nil Then
g.DrawPicture(mRptDoc.Page(mCurrentPage), 0, 0)
PageLabel.Text = "Page " + Str(mCurrentPage) + " of " + Str(mRptDoc.PageCount)
End If
End EventHandler
End Control
Control PreviousPageButton Inherits PushButton
ControlInstance PreviousPageButton Inherits PushButton
EventHandler Sub Action()
If mCurrentPage > 1 Then
mCurrentPage = mCurrentPage - 1
ReportCanvas.Invalidate(False)
Else
MsgBox("First page!")
End If
End EventHandler
End Control
Control NextPageButton Inherits PushButton
ControlInstance NextPageButton Inherits PushButton
EventHandler Sub Action()
If mCurrentPage < RptDoc.PageCount Then
mCurrentPage = mCurrentPage + 1
ReportCanvas.Invalidate(False)
Else
MsgBox("Last page!")
End If
End EventHandler
End Control
Control PageLabel Inherits Label
ControlInstance PageLabel Inherits Label
End Control
Property Private mCurrentPage As Integer
Property Private mRptDoc As Reports.RBReportDocument
End Class
Class ReportDataListBox Inherits ListBox
Function EOF() As Boolean
// Part of the Reports.Dataset interface.
If mRow > Self.ListCount-1 Then
Return True
Else
Return False
End If
End Function
Function Field(idx As Integer) As Variant
// Part of the Reports.Dataset interface.
Select Case idx
Case 0
Return Field("FirstName")
Case 1
Return Field("LastName")
Else
Return ""
End Select
End Function
Function Field(name As String) As Variant
// Part of the Reports.Dataset interface.
Select Case name
Case "FirstName"
Return Self.Cell(mRow, 0)
Case "LastName"
Return Self.Cell(mRow, 1)
Else
Return ""
End Select
End Function
Function NextRecord() As Boolean
// Part of the Reports.Dataset interface.
mRow = mRow + 1
End Function
Sub Run()
// Part of the Reports.Dataset interface.
// Start with the first row
mRow = 0
End Sub
Function Type(fieldName as string) As integer
// Part of the Reports.Dataset interface.
// All columns in a ListBox are Text/String
// Types described here:
// http://docs.xojo.com/index.php/Database.FieldSchema
Return 5 // value for Text
End Function
Property Private mRow As Integer
End Class
Class MyDynaPDFMBS Inherits DynaPDFMBS
EventHandler Function Error(ErrorCode as integer, ErrorMessage as string, ErrorType as integer) As integer
// output all messages on the console:
System.DebugLog str(ErrorCode)+": "+ErrorMessage
// and display dialog:
Dim d as New MessageDialog //declare the MessageDialog object
Dim b as MessageDialogButton //for handling the result
d.icon=MessageDialog.GraphicCaution //display warning icon
d.ActionButton.Caption="Continue"
d.CancelButton.Visible=True //show the Cancel button
// a warning or an error?
if BitAnd(ErrorType, me.kE_WARNING) = me.kE_WARNING then
// if user decided to ignore, we'll ignore
if IgnoreWarnings then Return 0
d.Message="A warning occurred while processing your PDF code."
// we add a third button to display all warnings
d.AlternateActionButton.Caption = "Ignore warnings"
d.AlternateActionButton.Visible = true
else
d.Message="An error occurred while processing your PDF code."
end if
d.Explanation = str(ErrorCode)+": "+ErrorMessage
b=d.ShowModal //display the dialog
Select Case b //determine which button was pressed.
Case d.ActionButton
Return 0 // ignore
Case d.AlternateActionButton
IgnoreWarnings = true
Return 0 // ignore
Case d.CancelButton
Return -1 // stop
End select
End EventHandler
EventHandler Function PageBreak(LastPosX as double, LastPosY as double, PageBreak as boolean) As integer
PageBreak = true
Return -1 // stop
End EventHandler
Property IgnoreWarnings As Boolean
Property PageBreak As Boolean
End Class
Class NameReport Inherits Report
Control FirstNameLabel Inherits ReportLabel
ControlInstance FirstNameLabel Inherits ReportLabel
End Control
Control LastNameLabel Inherits ReportLabel
ControlInstance LastNameLabel Inherits ReportLabel
End Control
Control FirstNameField Inherits ReportField
ControlInstance FirstNameField Inherits ReportField
End Control
Control LastNameField Inherits ReportField
ControlInstance LastNameField Inherits ReportField
End Control
ReportSection Body
ReportSection PageFooter
ReportSection PageHeader
End Class
End Project
See also:
- /DynaPDF/DynaPDF Database Invoice Example
- /DynaPDF/DynaPDF Graphics/DynaPDF Graphics Desktop
- /DynaPDF/DynaPDF Graphics/DynaPDF Graphics iOS
- /DynaPDF/DynaPDF Graphics/Reporting/GasReport/GasReport
- /DynaPDF/DynaPDF Graphics/Reporting/List Of Orders
- /DynaPDF/DynaPDF Graphics/Reporting/List Of Products
- /DynaPDF/DynaPDF Graphics/VectorGraphics
- /DynaPDF/DynaPDF Makros
- /DynaPDF/DynaPDF Merge 2 to 1
- /DynaPDF/DynaPDF transparent images/DynaPDF transparent images
The items on this page are in the following plugins: MBS DynaPDF Plugin.