Ориентация макета по умолчанию при печати XPSs с использованием WPF XPS Viewer

StackOverflow https://stackoverflow.com/questions/505839

Вопрос

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

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

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

Это было полезно?

Решение

Заполните поле распечатанного билета:

  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)
  {
    ...
  }

Другие советы

Я считаю, что правильный способ сделать это при создании 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.

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

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

*%****************************************************************************** *% Ориентация *%****************************************************************************** *Характеристика:Ориентация { *rcNameID:=ОРИЕНТАЦИЯ_DISPLAY *Опция по умолчанию:ПОРТРЕТ

*Option: PORTRAIT
{
    *rcNameID: =PORTRAIT_DISPLAY
}

*Option: LANDSCAPE_CC270
{
    *rcNameID: =LANDSCAPE_DISPLAY
}

}

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top