作成日: 2021/01/27 最終更新日: 2021/01/27
文書種別
使用方法
詳細
本コンポーネントには、印刷を行うための組み込みの機能は用意されておりませんが、FlexChartをSaveImageメソッドで画像として保存し、.NET FrameworkのPrintDocumentクラスとGraphics.DrawImageを利用してチャートを印刷することができます。以下に、これらの機能を使用し、プリンタ設定ダイアログおよび印刷プレピューダイアログを表示するサンプルコードを記載します。
※製品収録の「FlexChartPrint」サンプル(*)で、単一チャートや複数チャート等を印刷する方法をご紹介していますので、そちらもご参照ください。
このサンプルでは、必要な印刷ロジックの多くをカプセル化したChartPrinterクラスを作成して、各種印刷に利用しています。なお、ChartPrinterクラスを他のアプリケーションでも利用できるよう、DLL(C1.Chart.FlexChart.Printing.dll)としても生成しています。
*(インストール先)
C:¥Users¥<アカウント名>¥Documents¥ComponentOne Samples¥WinForms¥C1FlexChart¥CS¥FlexChartPrint¥FlexChartPrint
◎サンプルコード(VB)
※製品収録の「FlexChartPrint」サンプル(*)で、単一チャートや複数チャート等を印刷する方法をご紹介していますので、そちらもご参照ください。
このサンプルでは、必要な印刷ロジックの多くをカプセル化したChartPrinterクラスを作成して、各種印刷に利用しています。なお、ChartPrinterクラスを他のアプリケーションでも利用できるよう、DLL(C1.Chart.FlexChart.Printing.dll)としても生成しています。
*(インストール先)
C:¥Users¥<アカウント名>¥Documents¥ComponentOne Samples¥WinForms¥C1FlexChart¥CS¥FlexChartPrint¥FlexChartPrint
◎サンプルコード(VB)
Imports System.IO
Imports System.Drawing.Printing
Imports C1.Win.Chart
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの作成
Dim dt As DataTable = New DataTable("Test")
dt.Columns.Add("X", GetType(DateTime))
dt.Columns.Add("Y1", GetType(Int32))
dt.Columns.Add("Y2", GetType(Int32))
Dim r As Random = New Random
Dim i = 0
Do While (i < 5)
dt.Rows.Add(DateTime.Today.AddDays(i), r.Next(1, 20), r.Next(0, 20))
i = (i + 1)
Loop
dt.AcceptChanges()
' シリーズの作成
Dim series1 As Series = New Series
series1.BindingX = "X"
series1.Binding = "Y1"
series1.DataSource = dt
Dim series2 As Series = New Series
series2.BindingX = "X"
series2.Binding = "Y2"
series2.DataSource = dt
' チャートの設定
FlexChart1.Series.Clear()
FlexChart1.Series.Add(series1)
FlexChart1.Series.Add(series2)
FlexChart1.ChartType = C1.Chart.ChartType.Line
FlexChart1.AxisX.Format = "yyyy/MM/dd"
FlexChart1.AxisY.Max = 20
FlexChart1.AxisY.Min = 0
FlexChart1.PlotMargin = New Padding(40, 40, 40, 40)
FlexChart1.ToolTip.Active = False
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' PrintDocumentの作成
Dim pd As PrintDocument = New PrintDocument
Dim ps As PrinterSettings = pd.PrinterSettings
Dim indexA4 As PaperSize = Nothing
For Each temp As PaperSize In ps.PaperSizes
If (temp.Kind = PaperKind.A4) Then
indexA4 = temp
End If
Next
pd.DefaultPageSettings.PaperSize = indexA4
pd.DefaultPageSettings.Landscape = True
pd.DefaultPageSettings.Margins.Top = 5
pd.DefaultPageSettings.Margins.Left = 5
AddHandler pd.PrintPage, AddressOf Pd_PrintPage
' プリンタ設定ダイアログの表示
Dim pDialog As PrintDialog = New PrintDialog
pDialog.Document = pd
pDialog.ShowDialog()
' 印刷プレピューダイアログの表示
Dim ppDialog As PrintPreviewDialog = New PrintPreviewDialog
ppDialog.Document = pd
ppDialog.ShowDialog()
End Sub
Private Sub Pd_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
' チャートの印刷
Dim ms As MemoryStream = New MemoryStream
FlexChart1.SaveImage(ms, ImageFormat.Jpg, FlexChart1.Width, FlexChart1.Height)
Dim temp As Image = Image.FromStream(ms)
e.Graphics.DrawImage(temp, New Rectangle((e.MarginBounds.Left + 50), (e.MarginBounds.Top + 50), temp.Width, temp.Height))
End Sub
End Class
◎サンプルコード(C#)using System;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Windows.Forms;
using C1.Win.Chart;
namespace _20210105b
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//データの作成
DataTable dt = new DataTable("Test");
dt.Columns.Add("X", typeof(DateTime));
dt.Columns.Add("Y1", typeof(Int32));
dt.Columns.Add("Y2", typeof(Int32));
Random r = new Random();
for (var i = 0; i < 5; i++)
{
dt.Rows.Add(DateTime.Today.AddDays(i), r.Next(1, 20), r.Next(0, 20));
}
dt.AcceptChanges();
// シリーズの作成
Series series1 = new Series();
series1.BindingX = "X";
series1.Binding = "Y1";
series1.DataSource = dt;
Series series2 = new Series();
series2.BindingX = "X";
series2.Binding = "Y2";
series2.DataSource = dt;
// チャートの設定
flexChart1.Series.Clear();
flexChart1.Series.Add(series1);
flexChart1.Series.Add(series2);
flexChart1.ChartType = C1.Chart.ChartType.Line;
flexChart1.AxisX.Format = "yyyy/MM/dd";
flexChart1.AxisY.Max = 20;
flexChart1.AxisY.Min = 0;
flexChart1.PlotMargin = new Padding(40, 40, 40, 40);
flexChart1.ToolTip.Active = false;
}
private void button1_Click(object sender, EventArgs e)
{
// PrintDocumentの作成
PrintDocument pd = new PrintDocument();
PrinterSettings ps = pd.PrinterSettings;
PaperSize indexA4 = null;
foreach (PaperSize temp in ps.PaperSizes)
{
if (temp.Kind == PaperKind.A4)
{
indexA4 = temp;
}
}
pd.DefaultPageSettings.PaperSize = indexA4;
pd.DefaultPageSettings.Landscape = true;
pd.DefaultPageSettings.Margins.Top = 5;
pd.DefaultPageSettings.Margins.Left = 5;
pd.PrintPage += Pd_PrintPage;
// プリンタ設定ダイアログの表示
PrintDialog pDialog = new PrintDialog();
pDialog.Document = pd;
pDialog.ShowDialog();
// 印刷プレピューダイアログの表示
PrintPreviewDialog ppDialog = new PrintPreviewDialog();
ppDialog.Document = pd;
ppDialog.ShowDialog();
}
private void Pd_PrintPage(object sender, PrintPageEventArgs e)
{
// チャートの印刷
using (MemoryStream ms = new MemoryStream())
{
flexChart1.SaveImage(ms, ImageFormat.Jpg, flexChart1.Width, flexChart1.Height);
Image temp = Image.FromStream(ms);
e.Graphics.DrawImage(temp, new Rectangle(e.MarginBounds.Left + 50, e.MarginBounds.Top + 50, temp.Width, temp.Height));
}
}
}
}
旧文書番号
86363