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 with8x6
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.
精彩评论