更改PrintableArea宽度和高度

时间:2019-01-31 10:07:48

标签: c# printing printdialog

我正在根据FrameworkElement创建一个FixedDocument。 FrameworkElement可以具有不同的大小(例如Width = 300和height = 1800)。 我想通过FrameworkElement的大小指定打印机的大小:

public static FixedDocument GetFixedDocument(FrameworkElement toPrint, System.Windows.Controls.PrintDialog printDialog)
{
    //This changes the PageMediaSize, but has no effect after printDialog
    printDialog.PrintTicket.PageMediaSize = new System.Printing.PageMediaSize(toPrint.Width, toPrint.Height);
    printDialog.PrintQueue.DefaultPrintTicket.PageMediaSize = new System.Printing.PageMediaSize(toPrint.Width, toPrint.Height);

    return toPrint;
}

由于printDialog.PrintableAreaWidth和printDialog.PrintableAreaHeight''是只读的,所以我无法更改打印机的默认大小(PaperKind始终为A4):

enter image description here

PrintPreview将FixedDocument显示为一页,但是打印实际文档仍然使用自定义尺寸。

    public static void ShowPrintPreview(FixedDocument fixedDoc)
    {
        var wnd = new Window();
        var viewer = new DocumentViewer();
        viewer.Document = fixedDoc;
        wnd.Content = viewer;
        wnd.ShowDialog();
    }

    public static void PrintNoPreview(System.Windows.Controls.PrintDialog printDialog, System.Windows.Documents.FixedDocument fixedDoc)
    {
        printDialog.PrintDocument(fixedDoc.DocumentPaginator, "MyGeneratedPDF");
    }

[或者,如果无法回答此问题,我想从FixedDocument生成PDF]

0 个答案:

没有答案