2013-06-25 38 views
0

背景如何在WPF应用程序中生成PDF和RTF报告?

我工作的一个WPF应用程序,我需要实现的报告功能,PDF和RTF格式。报告大多是表格。

该应用程序没有数据库。相反,它的数据是从本地XML文件中获取的,我从中创建View模型,然后将这些数据传递给用户界面以呈现给用户。我需要为这些报告使用这些查看模型。

问题

什么是我接近这个要求,这样我就可以用我现有的视图模型生成PDF和RTF格式报告的最佳方式?

潜力

我就在想,如果这是一个Web应用程序,我可以生成HTML格式的报告,并使用第三方工具将其转换为PDF和RTF。我以前做过这个,我知道它会起作用。不幸的是,不能保证用户将有互联网连接,所以我必须将报告生成保存在本地。

所以我想知道如何使用XAML来定义报告模板。这可能吗?我在CodePlex上看到一个Xaml FlowDocument or XPS to PDF Converter的实用程序,但它适用于FlowDocument,但我不认为这是我需要的。我将要生成的报告大多是表格式的。

+0

我在几个月前使用telerik richtextbox和其他相关控件开发了一个类似的应用程序。我使用书签来识别xsd字段。报表设计器在用户将xsd元素拖放到richtextbox上时创建书签。最后它用xml中的值替换书签以生成输出。祝你的项目好运。 –

回答

0

事实证明这一点:

Xaml FlowDocument or XPS to PDF Converter

似乎是解决方案。

我可以在FlowDocument中指定表格,然后指定一个DataContext将我的视图模型绑定到它,然后我可以使用内置功能将其转换为PDF,或者将它转换为RTF类似于如下:

// get FlowDocument object 
var uri = new Uri("/Documents/SamplePDF.xaml", UriKind.Relative); 

FlowDocument doc = App.LoadComponent(uri) as FlowDocument; 


// create TextRange representation of the FlowDocument 
var content = new TextRange(doc.ContentStart, doc.ContentEnd); 

if (content.CanSave(DataFormats.Rtf)) 
{ 
    using (var stream = new FileStream(@"C:\Path\To\file.rtf", FileMode.OpenOrCreate)) 
    { 
     // save it 
     content.Save(stream, DataFormats.Rtf); 
    } 
}