This control implements a document viewer.
The class can be created. To create a new DocumentView object:
Dim hDocumentView As DocumentView hDocumentView = New DocumentView ( Parent As Container ) [ As "EventName" ]
The DocumentView class has these properties
Property | Data type | Description |
---|---|---|
Arrangement | Integer | Returns or specifies how the different pages are arranged within the view. This property can take one of the following values: Arrange.Vertical, Arrange.Horizontal, Arrange.Row, Arrange.Column or Arrange.Fill. |
AutoCenter | Boolean | Returns or specifies whether the page is centred if only one page is displayed in the width. This is only available for some arrangement modes: Arrange.Vertical, Arrange.Horizontal or Arrange.Fill. |
Center | Boolean | Returns or defines whether the page is centred in the view or not. |
Border | Boolean | Returns or specifies whether the document view has a border. |
Column | Integer | This allows you to specify the number of columns displayed, depending on the selected arrangement mode. |
Columns | Integer | Returns or defines the number of columns used for the layout of the pages. If this value is set to zero (default), the pages are only displayed individually in the preview. Otherwise, all pages are arranged from top to bottom. |
Count | Integer | Returns or defines the number of pages in the document. |
Desaturate | Boolean | Returns or specifies whether the preview is desaturated automatically. |
Direction | Integer | Returns or defines the direction of the text. It can take one of the following values: Direction.Default, Direction.RightToLeft, Direction.LeftToRight. |
DocHeight | Integer | Returns or sets the default height of a page in millimetres. The default height of the page is 297∙mm (A4 format). |
DocWidth | Integer | Returns or sets the default width of a page in millimetres. The default width of the page is 210∙mm (A4 format). |
FirstVisibleDocument | Integer | Returns the number of the first visible page in the viewer. |
LastVisibleDocument | Integer | Returns the number of the last visible page in the viewer. |
FirstVisiblePage | Integer | Returns the index of the first visible page in the viewer. |
LastVisiblePage | Integer | Returns the index of the last visible page in the viewer. |
Layout | _DocumentLayout | Returns a virtual object that is used to define the layout of a specific page. See the 'Layout' event for more details. The _DocumentLayout class has 2 properties: (1) Height: Specifies or sets the height of the page in millimetres and (2) Width: Returns or sets the width of the page in millimetres. |
Max | Integer | Returns the number of pages of the document - reduced by 1 - and thus corresponds to the highest page index. |
Padding | Integer | Returns or defines the (inner) margin spacing within the view in millimetres. The specification applies to all 4 directions! |
PageHeight | Integer | Returns or defines the standard height of a page in millimetres. The standard page size is 210∙mm x 297∙mm (A4 format). |
PageWidth | Integer | Returns or sets the default width of a page in millimetres. The default size of the page is 210∙mm x 297∙mm (A4 format). |
ShowPage | Boolean | Returns or specifies whether the page number should be displayed within the view. |
ShowShadow | Boolean | Returns or specifies whether the pages are to be drawn with a small shadow. |
Zoom | Float | Returns or sets the zoom factor of the view. 'Zoom' is a synonym for the 'Scale' property. |
Table 23.13.1.1 : Properties of the DocumentView class
The DocumentView class has these essential methods:
Method | Description |
---|---|
Find ( X As Integer, Y As Integer ) | Returns the page number under a specific mouse pointer position. X and Y are the positions of the mouse pointer relative to the document view. |
Goto ( Page As Integer ) | Moves the view to a specific page. 'Page' is the page number, starting at zero. |
Refresh ( ) | Refreshes the contents of the view in the viewer |
Reset ( ) | Resets the view. |
Show ( ) | Displays the control. |
Table 23.13.2.1 : Methods of the DocumentView class
The DocumentView class has these events:
Event | Description |
---|---|
Draw ( Page As Integer, Width As Integer, Height As Integer ) | This event is triggered when a specific page preview needs to be drawn: 'Page' is the index of the page to be drawn. 'Width' and 'Height' are the size of the image buffer in which the page is to be drawn. |
Finished ( ) | This event is triggered when all page previews have been drawn. |
Layout ( Page As Integer ) | This event is triggered when the Page parameter changes and therefore each page layout can be defined independently. 'Page' is the index of the page to be designed. Use the Layout property within the handler of this event to define the layout of the *specified* page. |
Zoom ( ) | This event is triggered when the zoom level has changed. |
Table 23.13.3.1 : Events of the DocumentView class
The developer of the control, Fabien Bodard, described the possible applications of a DocumentView as follows: 'It can display not only PDF documents, but actually anything you want, as long as there is a utility that allows you to render the content. DocumentView provides you with 'canvases' on which you can draw whatever you want. So it can be anything as long as you can draw it with the Paint.DrawImage() function.
A typical application for the DocumentView control is the display of PDF files:
Figure 23.13.3.2.1: Display of a PDF document (excerpt)
Source code:
' Gambas class file Private $PDF_Document As New PdfDocument Public Sub Form_Open() btnOpen.SetFocus() End Public Sub btnOpen_Click() Dialog.Filter = ["*.pdf", "PDF-Files"] If Not Dialog.OpenFile() Then $PDF_Document.Open(Dialog.Path) '-- Setup the number of pages shown in the viewer. It enforce the layout event call DocumentView1.Count = $PDF_Document.Count DocumentView1.Refresh() Wait Else Return Endif End Public Sub DocumentView1_Layout(Page As Integer) DocumentView1.Layout.Width = $PDF_Document[Page + 1].Width DocumentView1.Layout.Height = $PDF_Document[Page + 1].Height End Public Sub DocumentView1_Draw(Page As Integer, Width As Integer, Height As Integer) '-- Draw the pdf image Paint.DrawImage($PDF_Document[Page + 1].Image, 0, 0, Paint.Width, Paint.Height) End Public Sub DocumentView1_Zoom() $PDF_Document.Zoom = Last.Zoom End Public Sub Form_Resize() DocumentView1.Column = 1 DocumentView1.Refresh() Wait End Public Sub btnClose_Click() FMain.Close() End
In the second project, each image content is drawn on a separate image - as a canvas - and displayed in the size specified by the slider in the range from 0% to 200% for each individual page:
Public Sub DocumentView1_Draw(Page As Integer, Width As Integer, Height As Integer) Paint.DrawImage($aImages[Page], 0, 0, Width, Height) End
The focus is not on the detailed preview of individual images, but on the overview of all images in the selected directory:
Figure 23.13.3.3.1: Reduced display of images in a DocumentView
Source code:
' Gambas class file Private $sPath As String Private $aImages As New Image[] Public Sub Form_Open() lblMin.Text = sliderZoom.MinValue lblMax.Text = Str(sliderZoom.MaxValue) & "%" DocumentView1.Arrangement = Arrange.None DocumentView1.Columns = 0 DocumentView1.Center = True DocumentView1.Spacing = 20 sliderZoom.Value = 30 DirBox1.Tooltip = "Select an image directory!" ChangePath() End Public Sub DirBox1_Change() $sPath = Last.Path ChangePath() sliderZoom.Value = 32 End Public Sub ChangePath() Dim sFile As String Dim hImage As Image $aImages.Clear() For Each sFile In Dir($sPath, Null, gb.File) Select Case File.Ext(sFile) Case "png", "jpg" hImage = Image.Load($sPath &/ sFile) $aImages.Add(hImage) End Select Next DocumentView1.Count = $aImages.Count End Public Sub DocumentView1_Draw(Page As Integer, Width As Integer, Height As Integer) Paint.DrawImage($aImages[Page], 0, 0, Width, Height) End Public Sub DocumentView1_Layout(Page As Integer) '-- Allow to define specific layout for items '-- It is called before the drawing... so images need to be seen twice in this case DocumentView1.Layout.Width = $aImages[Page].W DocumentView1.Layout.Height = $aImages[Page].H End Public Sub DocumentView1_Zoom() DocumentView1.Refresh() End Public Sub sliderZoom_Change() DocumentView1.Zoom = sliderZoom.Value / 100 lblMax.Text = Str(sliderZoom.Value) & "%" End
You can find the project archives for the two projects presented in the download area.
Chapter & Projects