2

WPF XPS ビューアーを使用して XPS を印刷するときに、既定のレイアウトの向きを設定する方法はありますか?

固定ドキュメント XPS のページの向きは横に設定されています。ページ メディア サイズの幅は高さよりも長く、ビューアーでは横として正しく表示されます。印刷ボタンを押すと、印刷ダイアログの設定がデフォルトでポートレートに設定され、そのまま印刷されます。

ユーザーの既定の印刷設定を変更する必要はありません。XPS ビューアーが XPS を印刷用に設計されたとおりに印刷することを望んでいます。

4

4 に答える 4

3

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)
  {
    ...
  }
于 2015-11-24T13:46:54.507 に答える
0

これは実際には MXDW の問題ではなく、Windows でのドライバーの動作の問題です。ユーザーの選択は、特定のセッション用に保存されます。これは、最初の印刷とアプリケーションの終了の間に印刷するときに、最初の印刷設定を再利用できることを意味します。ほとんどのプリンターは、この情報をどこかに保存し、ユーザーがセッション間で再利用できるようにする方法を考え出さない限り、このように動作します。

そこで、GPD ファイル (通常、プリンターの印刷情報が格納されている場所) をハッキングしてみました。方向には PORTRAIT と LANDSCAPE_CC270 の 2 つの値があり、デフォルトは PORTRAIT に設定されています。下記参照:

*%************************************************ ****************************** *% オリエンテーション *%*************** ****************************************************** ************* *Feature: Orientation { *rcNameID: =ORIENTATION_DISPLAY *DefaultOption: PORTRAIT

*Option: PORTRAIT
{
    *rcNameID: =PORTRAIT_DISPLAY
}

*Option: LANDSCAPE_CC270
{
    *rcNameID: =LANDSCAPE_DISPLAY
}

}

ここで、スワップのデフォルト値を LANDSCAPE_CC270 に変更すると、印刷設定が表示されなくなります (そして、すべての印刷が失敗します)。実際、他の値を指定すると、デフォルトが PORTRAIT のままになるようです。確かに、MS は何らかのチェックを行って、このドライバーのハッキングを防止しています。MSは、誰もその設定を改ざんすることを望んでいないようです:(

しかし、GPD 値をもう少しいじってみて、好みのものが現れるかどうかを確認することもできます。もう少しハッキングを続けます。

警告: 何をしているのかわからない場合は、GPD ファイルを改ざんしないでください。それでも先に進みたい場合は、バックアップを作成してください!

ヒント:%WINDOWS%system32\spool\drivers\w32x86\3フォルダに保存されます。

于 2009-02-15T20:10:50.920 に答える
0

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 ドキュメントに役立つかどうかはわかりません。

于 2010-08-10T04:44:29.397 に答える