首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为Wpf DocumentViewer PrintDialog设置PageOrientation

为Wpf DocumentViewer PrintDialog设置PageOrientation
EN

Stack Overflow用户
提问于 2009-06-16 19:48:55
回答 2查看 18.9K关注 0票数 18

使用Wpf DocumentViewer控件时,我不知道如何在用户单击print按钮时DocumentViewer显示的PrintDialog上设置PageOrientation。有没有办法连接到这里面?

EN

回答 2

Stack Overflow用户

发布于 2010-01-15 02:29:38

Mike's answer起作用了。我选择实现它的方式是创建我自己的文档查看器,该查看器派生自DocumentViewer。此外,将Document属性强制转换为FixedDocument对我来说不起作用,而强制转换为FixedDocumentSequence对我来说是无效的。

GetDesiredPageOrientation是你所需要的任何东西。在我的例子中,我检查了第一页的尺寸,因为我生成的文档对于文档中的所有页面都是统一的大小和方向,并且序列中只有一个文档。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Controls;
using System.Windows.Xps;
using System.Printing;
using System.Windows.Documents;

public class MyDocumentViewer : DocumentViewer
{
    protected override void OnPrintCommand()
    {
        // get a print dialog, defaulted to default printer and default printer's preferences.
        PrintDialog printDialog = new PrintDialog();
        printDialog.PrintQueue = LocalPrintServer.GetDefaultPrintQueue();
        printDialog.PrintTicket = printDialog.PrintQueue.DefaultPrintTicket;

        // get a reference to the FixedDocumentSequence for the viewer.
        FixedDocumentSequence docSeq = this.Document as FixedDocumentSequence;

        // set the default page orientation based on the desired output.
        printDialog.PrintTicket.PageOrientation = GetDesiredPageOrientation(docSeq);

        if (printDialog.ShowDialog() == true)
        {
            // set the print ticket for the document sequence and write it to the printer.
            docSeq.PrintTicket = printDialog.PrintTicket;

            XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printDialog.PrintQueue);
            writer.WriteAsync(docSeq, printDialog.PrintTicket);
        }
    }
}
票数 16
EN

Stack Overflow用户

发布于 2009-07-01 11:51:43

我用来在DocumentViewer的print对话框上设置方向的变通方法是隐藏DocumentViewer控件上的print按钮,方法是在模板中省略该按钮。然后,我提供了自己的打印按钮,并将其绑定到以下代码:

代码语言:javascript
复制
public bool Print()
    {
        PrintDialog dialog = new PrintDialog();
        dialog.PrintQueue = LocalPrintServer.GetDefaultPrintQueue();
        dialog.PrintTicket = dialog.PrintQueue.DefaultPrintTicket;
        dialog.PrintTicket.PageOrientation = PageOrientation.Landscape;

        if (dialog.ShowDialog() == true)
        {
            XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(dialog.PrintQueue);
            writer.WriteAsync(_DocumentViewer.Document as FixedDocument, dialog.PrintTicket);
            return true;
        }

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

https://stackoverflow.com/questions/1003585

复制
相关文章

相似问题

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