Hello all,
I have 2 charts on a pdf page. They appear one after the other.
I would like them to appear side by side on the page?
Not seeing a way to do this. Any help would be appreciated.
Thanks
Deasun
{vb.net :) }
Hello Deasun,
You can place charts side by side within a PDF document by positioning canvases within the PDF page, then rendering each chart to a canvas. This technique is explained in this walkthrough. I have attached a sample of the final product of the walkthrough if you'd like to see the code in action. Let me know if you have any questions.
Thanks,
Chris
thanks very much for the reply.
Question can this be used with sections?
Currently I have; Dim section1 As ISection = report.AddSection()
then I add a Header and Footer section and set the page number section
I export a wingrid to Section 1 using the griddocexporter.
Then for the charts I do;
Dim canvas As ICanvas = section1.AddCanvascanvas.Width = New FixedWidth(2000)canvas.Height = New FixedHeight(500)Dim g As Drawing.Graphics = canvas.CreateGraphics()uwCht_HidChartView.RenderPdfFriendlyGraphics(g)
and the 2nd chart gets:
Dim canvas2 As ICanvas = section1.AddCanvascanvas2.Width = New FixedWidth(2000)canvas2.Height = New FixedHeight(500)Dim g2 As Drawing.Graphics = canvas2.CreateGraphics()uwCht_HidChartView.RenderPdfFriendlyGraphics(g2)
Guess how does that page object work with the sections?
I may have come at this from wrong direction and missed something.
Here are a few things that you'll probably want to do different.
I'll paste my updated code at the end of the reply. Let me know if you have any issues with it. Thanks,
Dim UltraChart1 As New UltraChart() Dim report As New Infragistics.Documents.Reports.Report.Report()Dim section As ISection = report.AddSection()Me.UltraGridDocumentExporter1.Export(Me.UltraGrid1, section)'section.PageSize = New PageSize(800, 1000) Dim chartWidth As Integer = section.PageSize.Width / 2 _ - (section.PageMargins.Left + section.PageMargins.Right)Dim chartHeight As Integer = chartWidth * 0.75 UltraChart1.Size = New Size(chartWidth, chartHeight)UltraChart1.ChartType = ChartType.ColumnChartUltraChart1.Data.DataSource = New Integer() {1, 2, 3, 4, 5, 6}UltraChart1.Data.DataBind() Dim flow As IFlow = section.AddFlow()Dim canvas As ICanvas = flow.AddCanvas()canvas.Width = New FixedWidth(chartWidth)canvas.Height = New FixedHeight(chartHeight)Dim g As Graphics = canvas.CreateGraphics()UltraChart1.RenderPdfFriendlyGraphics(g) UltraChart1.ChartType = ChartType.GanttChartUltraChart1.Data.SwapRowsAndColumns = FalseUltraChart1.Data.DataSource = tableUltraChart1.Data.DataBind() canvas = flow.AddCanvas()canvas.Width = New FixedWidth(chartWidth)canvas.Height = New FixedHeight(chartHeight)g = canvas.CreateGraphics()UltraChart1.RenderPdfFriendlyGraphics(g) Dim reportPath As String = _ System.Environment.GetFolderPath( _ System.Environment.SpecialFolder.MyDocuments)report.Publish(reportPath + "\Report.pdf", FileFormat.PDF)
Dim UltraChart1 As New UltraChart()
Dim report As New Infragistics.Documents.Reports.Report.Report()Dim section As ISection = report.AddSection()Me.UltraGridDocumentExporter1.Export(Me.UltraGrid1, section)'section.PageSize = New PageSize(800, 1000)
Dim chartWidth As Integer = section.PageSize.Width / 2 _ - (section.PageMargins.Left + section.PageMargins.Right)Dim chartHeight As Integer = chartWidth * 0.75
UltraChart1.Size = New Size(chartWidth, chartHeight)UltraChart1.ChartType = ChartType.ColumnChartUltraChart1.Data.DataSource = New Integer() {1, 2, 3, 4, 5, 6}UltraChart1.Data.DataBind()
Dim flow As IFlow = section.AddFlow()Dim canvas As ICanvas = flow.AddCanvas()canvas.Width = New FixedWidth(chartWidth)canvas.Height = New FixedHeight(chartHeight)Dim g As Graphics = canvas.CreateGraphics()UltraChart1.RenderPdfFriendlyGraphics(g)
UltraChart1.ChartType = ChartType.GanttChartUltraChart1.Data.SwapRowsAndColumns = FalseUltraChart1.Data.DataSource = tableUltraChart1.Data.DataBind()
canvas = flow.AddCanvas()canvas.Width = New FixedWidth(chartWidth)canvas.Height = New FixedHeight(chartHeight)g = canvas.CreateGraphics()UltraChart1.RenderPdfFriendlyGraphics(g)
Dim reportPath As String = _ System.Environment.GetFolderPath( _ System.Environment.SpecialFolder.MyDocuments)report.Publish(reportPath + "\Report.pdf", FileFormat.PDF)
thanks very much.
Pointed me in the right direction.
Will play around with that code now.
Hi!
Try this version of the sample. I've marked all my changes with //TODO: CDS so you can quickly find the changes in the Task window. There are quite a few changes, but the main one regarding the stretching of the grid was due to the exported size of the grid being smaller than the default TargetPageSize of the exporter. As such, the method that attempts to figure out the grid's Size was returning the wrong value.
Figuring out the size of the charts was a bit of a task. The easy part was to make sure the width was being calculated based on the proper extent (ie. the Height when using landscape mode). The harder part dealt with determining the proper height for the chart. There is no way to know the exported grid height, so the sample had to estimate it based on the number of rows and their height.
Finally, the positioning of the chart area within each chart can be controlled using the Extent property on each Axis.
Hope this helps.
Another quick ?
On the Chart control, there appears to be a lot of space between the barchart and the legend at the bottom.
Anyway to decrease that spacing? Would like to increase the size of the barchart itself and leave the legend at the size its at.
Heres the PDF results docs!
Morning,
I rewrote the example project.Too many edits wanted a clean version.In this version I am supplying 4 pages.2 with 2 charts and 2 with 3 charts on it.Each having 1 grid.
I have also changed the DB table values to show what happens with different values in the last two pages grids.
I am also including 2 PDFs. 1 with the outcome using just your code. InfragisticsCode_exampleresults_RunBy_THRUD.pdfAnd the other with code changes I made. MyCode_exampleresults_RunBy_THRUD.pdf
Maybe I missed something in all the edits but the grid on the pages of the PDFusing the, .Width = Basic_GetExportSize(uwGrid_HiddenObj), doesn't seem to have expanded to the page margins.
In my code example I am finding the Max cell width and then adding a figure I calculated by hitnmiss reviewing the reports. Not something I want to do!You will also see on the last 2 pages that this value has to change because of the data in the cells/grid.
I need a much better way to keep the grids margin to margin on each page no matter the values in the girds.
Also Have a question on the Chart, Is it possible to center or left/right justify the actualchart part between the chart controls borders?Mgt would like it in the center.
ThanksDeasun