Ориентация макета по умолчанию при печати XPS с использованием WPF XPS Viewer - PullRequest
2 голосов
/ 03 февраля 2009

Есть ли способ установить ориентацию макета по умолчанию при печати XPS с помощью WPF XPS Viewer?

Мой фиксированный документ XPS имеет ориентацию страницы, установленную на альбомную, размер медиафайла страницы больше ширины, и он корректно отображается в средстве просмотра как альбомная. Просто, когда вы нажимаете кнопку «Печать», в настройках диалогового окна «Печать» устанавливается значение «Портрет», и он печатается как таковой.

Я бы предпочел не изменять пользовательские настройки печати по умолчанию. Я бы предпочел, чтобы программа XPS Viewer печатала XPS так, как она была предназначена для печати. ​​

Ответы [ 3 ]

2 голосов
/ 24 ноября 2015

Заполните поле PrintTicket:

  PrintDialog pd = new PrintDialog();
  PrintTicket pt = new PrintTicket();
  pt.PageOrientation = PageOrientation.Landscape;
  pd.PrintTicket = pd.PrintQueue.MergeAndValidatePrintTicket(pd.PrintQueue.DefaultPrintTicket, pt).ValidatedPrintTicket;
  if (pd.ShowDialog() == true)
  {
    ...
  }
0 голосов
/ 10 августа 2010

Я считаю, что правильный способ сделать это при создании FixedDocument, это установить RenderTransform = RotateTransform (90) для содержимого страницы, когда размеры выше, чем они широки. Пример:

var visualContent = new Image
            {
                Source = image,
                Stretch = Stretch.Uniform
            };
visualContent.RenderTransformOrigin = new Point(0.5, 0.5);    
visualContent.RenderTransform = new RotateTransform(90);
FixedPage fixedPage = new FixedPage();
fixedPage.Children.Add(visualContent);
var pageContent = new PageContent
{
    Child = fixedPage
};

Однако не уверен, поможет ли это с уже существующим документом XPS.

0 голосов
/ 15 февраля 2009

На самом деле проблема не в MXDW, а в том, как работают драйверы в Windows. Выбор (ы) пользователя сохраняются для конкретного сеанса. Это означает, что вы можете повторно использовать настройки первой печати при печати между первой печатью и выходом из приложения. Большинство принтеров ведут себя таким образом до тех пор, пока не будет найден способ сохранить эту информацию где-нибудь и позволить пользователю повторно использовать ее во время сеансов.

Итак, я попытался взломать файл GPD (где обычно хранится информация о печати для принтера). Ориентация имеет два возможных значения: PORTRAIT и LANDSCAPE_CC270, для которых по умолчанию установлено значение PORTRAIT. Смотрите ниже:

*% ********************************************* ********************************* *% Ориентация *% ************************************************ ****************************** * Характеристика: ориентация { * rcNameID: = ORIENTATION_DISPLAY * DefaultOption: ПОРТРЕТ

*Option: PORTRAIT
{
    *rcNameID: =PORTRAIT_DISPLAY
}

*Option: LANDSCAPE_CC270
{
    *rcNameID: =LANDSCAPE_DISPLAY
}

}

Теперь, если бы я изменил значение swap по умолчанию на LANDSCAPE_CC270, настройки печати перестали бы появляться (и любая печать не удалась бы). Фактически, оказывается, что при указании любого другого значения по умолчанию сохраняется значение PORTRAIT. Определенно, MS делать какие-то проверки, чтобы мы не взломали этот драйвер. Похоже, MS не хочу, чтобы кто-нибудь вмешался в его настройки: (

Но вы могли бы попытаться немного поиграть с значениями GPD и посмотреть, появится ли что-то по вашему вкусу. Будет продолжать взламывать немного больше.

Предупреждение: файлы GPD не должны быть подделаны, если вы не знаете, что делаете. если ты все еще хочу сделать резервную копию!

Подсказка: они хранятся в папке %WINDOWS%system32\spool\drivers\w32x86\3.

...