У меня есть класс ReportViewerView
, который наследует класс Window
. Я хочу сохранить содержимое этого класса в файл PDF.
Я уже могу открыть этот класс как окно с ShowDialog()
, и после открытия у этого окна есть возможность сохранить файл в формате Acrobat (pdf), который работает правильно. Однако я хочу сохранить содержимое этого окна без , прежде всего открыв диалоговое окно. У меня есть все данные, необходимые для открытия этого окна, и я хочу сохранить его немедленно, в заранее определенном месте файла, без необходимости ввода данных пользователем. Как я могу это сделать?
public void SaveReport(MyClass report, string title)
{
ReportViewerView reportViewer = new ReportViewerView(report, title);
//reportViewer.ShowDialog();
// is it even possible to make this a byte[] ?
byte[] reportBytes = Convert.FromBase64String(reportViewer.ToString());
System.IO.File.WriteAllBytes("C:\\Temp\\Test_Save.pdf", reportBytes);
//Maybe a FileStream?
using (FileStream fs = new FileStream("C:\\Temp\\Test_Save.pdf", FileMode.Open))
{ // Maybe not a TextReader... what would a 'Window' use?
using (System.Xml.XmlTextReader xmlReader = new System.Xml.XmlTextReader(fs))
{
reportViewer.Serialize(xmlReader); // cannot serialize anyway
}
}
}
Класс ReportViewerView
- это устаревший код на моем конце, который связан с классом Telerik ReportViewer
. Класс MyClass
является устаревшим кодом, унаследованным от Telerik.Reporting.Report
. Я подозреваю, что класс Windows
содержит мой ответ, но если это поможет, то это ReportViewerView.xaml.cs
:
public partial class ReportViewerView : Window
{
public ReportViewerView(MyClass reportDoc, string title)
{
InitializeComponent();
InstanceReportSource rs = new InstanceReportSource();
rs.ReportDocument = reportDoc;
this.reportViewer1.ReportSource = rs;
this.Title = title;
}
}
Класс MyClass
немного громоздок для полного копирования / вставки, но он должен делать все, что может его родительский Telerik.Reporting.Report
. Вот короткая версия:
partial class MyClass
{
private void InitializeComponent()
{
// lot of stuff
}
private Telerik.Reporting.PageHeaderSection pageHeaderSection1;
private Telerik.Reporting.DetailSection detail;
private Telerik.Reporting.PageFooterSection pageFooterSection1;
private Telerik.Reporting.TextBox textBox1;
private Telerik.Reporting.TextBox TitleTB;
private Telerik.Reporting.TextBox CustomerNameTB;
private Telerik.Reporting.TextBox ReportDateTB;
private string dateString
{
get { return DateTime.Now.ToString("g", CultureInfo.CreateSpecificCulture("en-us")); }
}
}