The C1Report provides support for displaying various images (jpeg, bmp, tiff, etc). However, it currently does not provide support for displaying Multi-Paged Tiff Images. This blog explains a workaround to load Multi-Paged Tiff Images in C1Report using two approaches:
The workaround is as follows:
The following method is used to save image frames of Multi-Page Tiff Images:
'Method to save frames of Multi-Page Tiff Image
Sub SaveTiffImage(filename As String)
Dim imgOriginal As Image = Image.FromFile(filename)
Dim objDimension As FrameDimension
objDimension = New FrameDimension(imgOriginal.FrameDimensionsList(0))
Dim nPageNo As Integer = imgOriginal.GetFrameCount(objDimension)
If nPageNo > 0 Then
Try
' import tiff images to the doc viewer
For i As Integer = 0 To nPageNo - 1
' Set the active frame
imgOriginal.SelectActiveFrame(FrameDimension.Page, i)
' Draw active frame
imgOriginal.Save("SaveImg" & i.ToString() & ".jpg")
Next i
Catch ex As Exception
' MessageBox.Show(ex.Message)
End Try
End If
End Sub
Once the tiff image frames are saved in multiple images it is quite easy to create a C1PrintDocument. All you need to do is create RenderImage objects and add these to the C1PrintDocument.Body.Children. The following is the code to do the same:
'Using C1PrintDocument
Sub C1PrintDocApproach()
Dim doc As New C1PrintDocument()
SaveTiffImage("..\\..\\C1Image.tif")
Dim r0 As New RenderImage()
r0.Image = Image.FromFile("SaveImg0.jpg")
Dim r1 As New RenderImage()
r1.Image = Image.FromFile("SaveImg1.jpg")
Dim r2 As New RenderImage()
r2.Image = Image.FromFile("SaveImg2.jpg")
Dim r3 As New RenderImage()
r3.Image = Image.FromFile("SaveImg3.jpg")
Dim r4 As New RenderImage()
r4.Image = Image.FromFile("SaveImg4.jpg")
Dim r5 As New RenderImage()
r5.Image = Image.FromFile("SaveImg5.jpg")
Dim r6 As New RenderImage()
r6.Image = Image.FromFile("SaveImg6.jpg")
doc.Body.Children.Add(r0)
doc.Body.Children.Add(r1)
doc.Body.Children.Add(r2)
doc.Body.Children.Add(r3)
doc.Body.Children.Add(r4)
doc.Body.Children.Add(r5)
doc.Body.Children.Add(r6)
'Display the C1PrintDocument in C1PrintPreviewControl
C1PrintPreviewControl1.Document = doc
End Sub
Adding multiple images in C1Report will require a little more effort than C1PrintDocument. The easiest way is to create a report definition file with the tiff image and add the tiff image frame by frame in code. The following code can be used to save the few images of multi-page tiff files physically and then add the images one-by-one to the report definition file:
C1Report1.Load("..\\..\\MultiPageImageTest.xml", "MultiPageImageReport") 'This report already has a field in the xml with the same tiff image loaded in the picture property that is necessary to render the first field
'Save the tiff image
SaveTiffImage("..\\..\\C1Image.tif")
'Default field
Dim defField As Field = C1Report1.Sections.Detail.Fields(0)
defField.Visible = False 'Hiding the default field in the report
'Adding first field
Dim Field1 As Field = C1Report1.Sections.Detail.Fields.Add("f1", "", defField.Left, defField.Top + 1, defField.Width, defField.Height)
Field1.PictureAlign = PictureAlignEnum.CenterTop
Field1.BackColor = Color.Transparent
Field1.CanGrow = True
Field1.PictureScale = PictureScaleEnum.Scale
Field1.Picture = Image.FromFile("SaveImg0.jpg")
'Adding second field
Dim Field2 As Field = C1Report1.Sections.Detail.Fields.Add("f2", "", Field1.Left, Field1.Height, Field1.Width, Field1.Height)
Field2.PictureAlign = PictureAlignEnum.CenterTop
Field2.BackColor = Color.Transparent
Field2.CanGrow = True
Field2.PictureScale = PictureScaleEnum.Scale
Field2.Picture = Image.FromFile("SaveImg1.jpg")
'Adding third field
Dim Field3 As Field = C1Report1.Sections.Detail.Fields.Add("f3", "", Field2.Left, Field1.Height + Field2.Height + 1, Field2.Width, Field2.Height)
Field3.PictureAlign = PictureAlignEnum.CenterTop
Field3.BackColor = Color.Transparent
Field3.CanGrow = True
Field3.PictureScale = PictureScaleEnum.Scale
Field3.Picture = Image.FromFile("SaveImg2.jpg")
.......
For complete code please refer to the attached sample. Download Sample