Printing viewport

江枫思渺然 提交于 2019-12-23 03:05:58

问题


C# wpf 3D visual studio 2010 net 4.5

Hi

I am trying to print out the 3D image I have created but can not get it right. The image that is printed is changing in size depending on how large the window is etc. or it is clipped etc.

What I would like is to print the view port on the printer, stretching it so wide as the paper is and keeping aspect ration.

        PrintDialog dialog = new PrintDialog();
        if (dialog.ShowDialog() != true)
        { return; }

        StackPanel myPanel = new StackPanel();
        myPanel.Margin = new Thickness(40);

        Image myImage = new Image();
        myImage.Width = dialog.PrintableAreaWidth - (2 * MYDPI);
        myImage.Stretch = Stretch.Uniform;
        RenderTargetBitmap bmp = new RenderTargetBitmap((int)dialog.PrintableAreaWidth, (int)dialog.PrintableAreaWidth, 96, 96, PixelFormats.Pbgra32);
        bmp.Render(myViewPort);

        myImage.Source = bmp;

        myPanel.Children.Add(myImage);

        myPanel.Measure(new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight));
        myPanel.Arrange(new Rect(new Point(0, 0), myPanel.DesiredSize));

        dialog.PrintVisual(myPanel, myName);

回答1:


The following worked, now the picture get scaled to the size of the paper regardless of the size of the viewport

...

        PrintDialog dialog = new PrintDialog();

        if (dialog.ShowDialog() != true)
        { 
            return; 
        }


        Grid grid = new Grid();

        grid.Margin = new Thickness(40);

        //do this for each column
        ColumnDefinition coldef;
        coldef = new ColumnDefinition();
        coldef.Width = new GridLength(dialog.PrintableAreaWidth, GridUnitType.Pixel);
        grid.ColumnDefinitions.Add(coldef);

        //do this for each row
        RowDefinition rowdef;
        rowdef = new RowDefinition();
        rowdef.Height = new GridLength(1, GridUnitType.Auto);
        grid.RowDefinitions.Add(rowdef);
        //
        rowdef = new RowDefinition();
        rowdef.Height = new GridLength(1, GridUnitType.Auto);
        grid.RowDefinitions.Add(rowdef);

        TextBlock myTitle = new TextBlock();
        myTitle.FontSize = 24;
        myTitle.FontFamily = new FontFamily("Arial");
        myTitle.TextAlignment = TextAlignment.Center;
        myTitle.Text = myName;

        grid.Children.Add(myTitle);
        //put it in column 0, row 0
        Grid.SetColumn(myTitle, 0);
        Grid.SetRow(myTitle, 0);

        Image myImage = new Image();
        RenderTargetBitmap bmp = new RenderTargetBitmap((int)this.Width, (int)this.Height, 96, 96, PixelFormats.Pbgra32);
        bmp.Render(myViewPort);

        myImage.Source = bmp;
        myImage.Stretch = Stretch.Uniform;

        grid.Children.Add(myImage);
        //put it in column 0, row 1
        Grid.SetColumn(myImage, 0);
        Grid.SetRow(myImage, 1);

        grid.Measure(new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight));
        grid.Arrange(new Rect(new Point(0, 0), grid.DesiredSize));

        dialog.PrintVisual(grid, myName);


来源:https://stackoverflow.com/questions/7318544/printing-viewport

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!