Фотопечать в C # - PullRequest
       6

Фотопечать в C #

1 голос
/ 15 марта 2011

У меня есть следующий C# код для печати 8x6 фотографий в настольном приложении.

Он работает на обычном принтере с обычной бумагой формата Letter.
Но мой клиент использует принтер Kodak с бумагой 8x6, фотографии печатаются, но их размер отличается, они печатаются не полностью *Размер 1007 *, я делаю что-то не так.

Может кто-нибудь, пожалуйста, направьте меня в правильном направлении.

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;
            if (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");
        }
    }
}

1 Ответ

0 голосов
/ 15 марта 2011

Проверьте значения HardMarginX и HardMarginY, если вы можете их найти.

У меня есть этот код в одном из моих приложений (где e - 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);

Моя функция печати немного примитивна, но, возможно, вы можете настроить xcor и ycor на основежесткие поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...