Установка PageOrientation для Wpf DocumentViewer PrintDialog

button.titleLabel.font = <whatever font you want>

Для людей, задающихся вопросом, почему их текст не отображается, если вы это сделаете

button.titleLabel.text = @"something";

Он не будет отображаться, вам нужно сделать:

[button setTitle:@"My title" forState:UIControlStateNormal]; //or whatever you want the control state to be
18
задан 16 June 2009 в 19:48
поделиться

2 ответа

Обходной путь, который я использовал для установки ориентации в диалоговом окне печати DocumentViewer, был , чтобы скрыть кнопку печати в элементе управления DocumentViewer, исключив ее из шаблона. Затем я предоставил свою собственную кнопку печати и привязал ее к следующему коду:

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
ответ дан 30 November 2019 в 08:27
поделиться

Зона безопасности не имеет значения, поскольку пользователи Windows могут сами определить, какие протоколы обрабатываются какой зоной. Например, я добавил весь http и всю https зону в зону доверенных сайтов (зона 2). Это делается с помощью ключа

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet     Settings\ZoneMap\ProtocolDefaults

Вы можете проверить document.protocol через javascript, но как это поможет вам?

if (document.protocol == "HTTP (HyperText Transfer-Protokoll)")

Вы предполагаете, что это зона Интернета, но на моем компьютере это доверенная зона с собственными индивидуальными настройками безопасности. Это sux, что jscript не позволит получить отдельные значения настроек безопасности для каждой зоны.

Объекты activex можно выполнять без этой дурацкой желтой полосы, но необходимо добавить подсказки com objects в список безопасных com объектов. Это делается через реестр. По умолчанию небезопасно для большинства объектов, за исключением таких глупых бесполезных объектов, как flash activex, wmp activex и прочее

-121--3367618-

Судя по гуглу, коллекция параметров может быть пустой. Я бы добавил пустой чек перед вызовом запроса.

Урок в том, что Google - ваш друг. Если вы не можете найти сообщение об ошибке, попробуйте ввести его в Google (или в вашем любимом ядре). Вы вряд ли будете первым, кого это смутило.

-121--1599531-

Ответ Майка работает. Способ его реализации заключался в создании собственного средства просмотра документов, полученного из DocumentViewer. Кроме того, приведение свойства Document к FixedDocument не работало для меня - приведение к FixedDocumentSequence было.

GetDesiredPageOrientation - это все, что вам нужно. В моем случае я проверяю размеры первой страницы, потому что я генерирую документы одинакового размера и ориентации для всех страниц в документе, и только с одним документом в последовательности.

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
ответ дан 30 November 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: