开发者

Photo printing in C#

I have the following C# code to print 8x6 photos in a desktop application.

It works on regular printer with regular letter size paper.

But my client is using kodak printer with 8x6 paper, the photos are printing but their size is different, they are not printing in full 8x6 size, I'm doing something wrong.

Can someone please guide me in right direction.

public void Print(List ListToBePrinted)
{
    PrintDialog SelectedPrinter = new PrintDialog();
    if (SelectedPrinter.ShowDialog() == true)
    {
        PrintCapabilities printerCapabilities = SelectedPrinter.PrintQueue.GetPrintCapabilities();
        Size PageSize = new Size(printerCapabilities.PageImageableArea.ExtentWidth, printerCapabilities.PageImageableArea.ExtentHeight);
        Size PrintableImageSize = new Size();
        foreach (Uri aUri in ListToBePrinted)
        {
            DrawingVisual drawVisual = new DrawingVisual();
            ImageBrush imageBrush = new ImageBrush();
            imageBrush.ImageSource = new BitmapImage(aUri);
            imageBrush.Stretch = Stretch.Fill;
            imageBrush.TileMode = TileMode.None;
            imageBrush.AlignmentX = AlignmentX.Center;
            imageBrush.AlignmentY = AlignmentY.Center;
            if (imageBrush.ImageSource.Width > imageBrush.ImageSource.Height)
                PrintableImageSize = new Size(768, 576); //8x6
            else PrintableImageSize = new Size(576, 768); //6x8 
            double xcor = 0; double ycor = 0;
            i开发者_C百科f (imageBrush.ImageSource.Width > imageBrush.ImageSource.Height)
            {
                if ((PageSize.Width - PrintableImageSize.Height) > 0)
                    xcor = (PageSize.Width - PrintableImageSize.Height) / 2;
                if ((PageSize.Height - PrintableImageSize.Width) > 0)
                    ycor = (PageSize.Height - PrintableImageSize.Width) / 2;
            }
            else
            {
                if ((PageSize.Width - PrintableImageSize.Width) > 0)
                    xcor = (PageSize.Width - PrintableImageSize.Width) / 2;
                if ((PageSize.Height - PrintableImageSize.Height) > 0)
                    ycor = (PageSize.Height - PrintableImageSize.Height) / 2;
            }
            using (DrawingContext drawingContext = drawVisual.RenderOpen())
            {
                if (imageBrush.ImageSource.Width > imageBrush.ImageSource.Height)
                {
                    drawingContext.PushTransform(new RotateTransform(90, PrintableImageSize.Width / 2, PrintableImageSize.Height / 2));
                }
                drawingContext.DrawRectangle(imageBrush, null, new Rect(xcor, ycor, PrintableImageSize.Width, PrintableImageSize.Height));
            }
            SelectedPrinter.PrintVisual(drawVisual, "Print");
        }
    }
}


Checkout the HardMarginX and HardMarginY values, if you can find them.

I have this code in one of my apps (where e is a PrintPageEventArgs)

    e.Graphics.DrawImage(nextImage, e.PageSettings.PrintableArea.X - e.PageSettings.HardMarginX, e.PageSettings.PrintableArea.Y - e.PageSettings.HardMarginY, e.PageSettings.Landscape ? e.PageSettings.PrintableArea.Height : e.PageSettings.PrintableArea.Width, e.PageSettings.Landscape ? e.PageSettings.PrintableArea.Width : e.PageSettings.PrintableArea.Height);

My printing function is a bit primitive, but maybe you can adjust your xcor and ycor based on the hard margins.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜