使用WPF XPS Viewer打印XPS时的默认布局方向

时间:2009-02-03 02:30:25

标签: printing xps xpsdocument xpsviewer

使用WPF XPS Viewer打印XPS时有没有办法设置默认布局方向?

我的固定文档XPS的页面方向设置为横向,页面媒体大小的宽度比其高度长,并且它在Viewer中正确显示为横向。 只需在按下打印按钮时,“打印对话框”首选项默认为“纵向”,它就会打印出来。

我宁愿不必改变用户的默认打印设置,如果XPS Viewer打印XPS就像打印它一样,我更喜欢它。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

对于MXDW来说,这不是一个真正的问题,但是有一个驱动程序在Windows上运行的方式。为特定会话保存用户选择。这意味着您可以在第一次打印和退出应用程序之间进行打印时重复使用第一次打印设置。大多数打印机都采用这种方式,除非有人想出一种方法在某处保存这些信息,并让用户在会话中重复使用它。

所以,我试图破解GPD文件(通常存储打印机的打印信息)。方向有两个可能的值:PORTRAIT和LANDSCAPE_CC270,默认设置为PORTRAIT。见下文:

*%********************************************* ********************************* *%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文件夹中。

答案 2 :(得分: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文档是否有帮助。

答案 3 :(得分:0)

<Grid Margin="0,0,-8,-8">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="50"/>
    </Grid.RowDefinitions>

    <FlowDocumentScrollViewer Name="printpanel" HorizontalAlignment="Left" Width="959" FontFamily="Arial" Margin="0,-10,0,10">
        <FlowDocument x:Name="FD">

            <BlockUIContainer>

                <Canvas>
                    <Label x:Name="lblReceipt" Visibility="Visible" Content="Receipt No." HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Top="178" FontSize="12" Canvas.Left="60"/>
                    <Label x:Name="txtReceiptNo" BorderThickness="2" BorderBrush="Black" HorizontalAlignment="Left"  Padding="10,3,3,0" Height="23"   VerticalAlignment="Top" Width="200" FontSize="12" Canvas.Left="187" Canvas.Top="177" FontFamily="Arial"/>
                    <Label x:Name="lblmemNo" Visibility="Visible" Content="Membership No." HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="12" Canvas.Left="462" Canvas.Top="177"/>
                    <Label x:Name="txtMembershipNo"  BorderThickness="2" BorderBrush="Black" HorizontalAlignment="Left" Padding="10,3,3,0" Height="23"  VerticalAlignment="Top" Width="177" FontSize="12" Canvas.Left="604" Canvas.Top="177" FontFamily="Arial">

                    </Label>
                    <Label x:Name="lblAuthCentr" Visibility="Visible" Content="Authorised Center." HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="60" Canvas.Top="221" FontSize="12"/>
                    <TextBox x:Name="txtAuthCentr"   HorizontalAlignment="Left" TextWrapping="WrapWithOverflow" Padding="10,3,3,0" Height="38"  VerticalAlignment="Top" Width="219" FontSize="12" Canvas.Left="238" Canvas.Top="219" FontFamily="Arial"/>
                    <Label x:Name="lblSector" Visibility="Visible" Content="Sector." HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="12" Canvas.Left="492" Canvas.Top="220"/>
                    <Label x:Name="txtSector" BorderThickness="2" BorderBrush="Black"  HorizontalAlignment="Left" Padding="10,3,3,0" Height="23"  VerticalAlignment="Top" Width="115" FontSize="12" Canvas.Left="567" Canvas.Top="220" FontFamily="Arial"/>
                   

                </Canvas>
            </BlockUIContainer>

        </FlowDocument>
    </FlowDocumentScrollViewer>

    <Button Name="btnOk" Content="Print" Height="30" Grid.Row="1" Click="btnOk_Click" Margin="355,0,404,0"></Button>
</Grid>

只需设置FlowDocument的高度和宽度

设置FD.PageWidth = 1100; FD.PageHeight = 600;

 
 private void btnOk_Click(object sender, RoutedEventArgs e)
        {
          

            if (File.Exists("printPreview.xps"))
            {
                File.Delete("printPreview.xps");
            }
            var xpsDocument = new XpsDocument("printPreview.xps", FileAccess.ReadWrite);
            XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
            DocumentPaginator docPage;
            FD.PageWidth = 1100; // set FlowDocument Width
            FD.PageHeight = 600; // set FlowDocument Height
            docPage = ((IDocumentPaginatorSource)FD).DocumentPaginator;
            writer.Write(docPage);
            Document = xpsDocument.GetFixedDocumentSequence();
            this.Close();
            xpsDocument.Close();
            var windows = new PrintWindow(Document);
            windows.ShowDialog();

        }