首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印缩放到适合页面的XpsDocument

打印缩放到适合页面的XpsDocument
EN

Stack Overflow用户
提问于 2013-05-14 19:56:41
回答 1查看 1.5K关注 0票数 0

我们在应用程序中使用了Telerik的WPF图表控件。图表控件具有将图形导出到XPS文件的内置支持。我想利用WPF对打印XPS文档的支持来打印图表。在大多数情况下,这很有效,但我在将图表缩放到一个页面上时遇到了困难。图表图形总是在右侧和底部被截断。图表对于页面来说太大了。有什么想法吗?

下面是我使用的代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-14 20:13:30

经过进一步的研究,我发现了下面的实现,它似乎工作得很好!http://www.telerik.com/community/forums/wpf/chart/behaviour-based-chart-print-solution.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16542537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档