我们在应用程序中使用了Telerik的WPF图表控件。图表控件具有将图形导出到XPS文件的内置支持。我想利用WPF对打印XPS文档的支持来打印图表。在大多数情况下,这很有效,但我在将图表缩放到一个页面上时遇到了困难。图表图形总是在右侧和底部被截断。图表对于页面来说太大了。有什么想法吗?
下面是我使用的代码:
const string packageUriString = "pack://inMemoryChart.xps";
using (var memoryStream = new MemoryStream())
{
//utilize Telerik ChartView method to export to XPS...
_chart.ExportToXps(memoryStream);
using (var package = Package.Open(memoryStream))
{
var packageUri = new Uri(packageUriString);
PackageStore.AddPackage(packageUri, package);
var xpsDocument = new XpsDocument(package, CompressionOption.Maximum, packageUriString);
var printDialog = new PrintDialog();
var result = printDialog.ShowDialog();
if (!result.GetValueOrDefault())
return;
var fixedDocumentSequence = xpsDocument.GetFixedDocumentSequence();
if (fixedDocumentSequence == null)
return;
var documentPaginator = fixedDocumentSequence.DocumentPaginator;
if (documentPaginator == null)
return;
//attempt to adjust to fit page?
AdjustFlowDocumentToPage(documentPaginator, printDialog.PrintQueue);
printDialog.PrintDocument(documentPaginator , "Chart");
PackageStore.RemovePackage(packageUri);
}
}我在另一台site上找到了AdjustFlowDocumentToPage
public static void AdjustFlowDocumentToPage(DocumentPaginator documentPaginator, PrintQueue printQueue)
{
const double inch = 96;
var printTicket = printQueue.UserPrintTicket;
// Get the media size.
double width = printTicket.PageMediaSize.Width.Value;
double height = printTicket.PageMediaSize.Height.Value;
// Set the margins.
const double leftmargin = 1.25 * inch;
const double rightmargin = 1.25 * inch;
const double topmargin = 1 * inch;
const double bottommargin = 1 * inch;
// Calculate the content size.
var contentwidth = width - leftmargin - rightmargin;
var contentheight = height - topmargin - bottommargin;
documentPaginator.PageSize = new Size(contentwidth, contentheight);
}发布于 2013-05-14 20:13:30
经过进一步的研究,我发现了下面的实现,它似乎工作得很好!http://www.telerik.com/community/forums/wpf/chart/behaviour-based-chart-print-solution.aspx
https://stackoverflow.com/questions/16542537
复制相似问题