У меня есть WinForm для создания ярлыков.
Он вызывает PrintPreviewDialog
и отображает информацию, используя PrintPageEventArgs
в PrintDocument
PrintPageEventHandler
.
void Document_Printed(object sender, PrintPageEventArgs e) {
// Code goes here
}
Если метка представляет собой небольшую метку адреса, идущую к букве 8,5х11, вместо того, чтобы видеть одну метку в PrintPreviewDialog
, я хочу увидеть количество меток, подходящих для этой PageSettings.PaperSize
.
Пример: скажем, четыре (4) элемента помещаются на выбранный носитель (этикетка принтера Avery или что-либо еще).
Если мой Конечный пользователь указывает от 1 до 4 копий для печати, я хочу, чтобы мойДиалоговое окно предварительного просмотра для отображения всех копий.
Если мой конечный пользователь указывает более четырех (4) элементов, диалоговое окно предварительного просмотра печати должно отображать несколько страниц (ранее я никогда не занимался несколькими страницами)).
Я могу измерить свои данные, чтобы они соответствовали размеру моего ярлыка, но я не знаю, как заставить мой PrintPageEventHandler
отображать более 1 ярлыка на PrintPreviewDialog
.
Может кто-нибудь показать мне, как это делается?Как отобразить и напечатать несколько ярлыков (документов?) На листе?
РЕДАКТИРОВАТЬ: Вот мой код, который основан на 2 объектах RectangleF: pageRect и LabelRect:
void Document_Printed(object sender, PrintPageEventArgs e) {
if (printPreview == null) return;
int labelSupport = 1;
RectangleF pageRect = new RectangleF(0, 0, printPreview.Document.DefaultPageSettings.PaperSize.Width, printPreview.Document.DefaultPageSettings.PaperSize.Height);
float fW = (pageRect.Width < LabelRect.Width) ? (pageRect.Width / LabelRect.Width) : (LabelRect.Width / pageRect.Width);
float fH = (pageRect.Height < LabelRect.Height) ? (pageRect.Height / LabelRect.Height) : (LabelRect.Height / pageRect.Height);
// START Portion I need HELP with!
if (1 < LabelsPerPage) {
if (Landscape) {
} else {
}
} else {
if (Landscape) {
} else {
}
}
// END (I think) Portion I need HELP with!
SizeF ratio = new SizeF(fW, fH);
Graphics G = e.Graphics;
foreach (Label item in labelList) {
Console.WriteLine(item.Name);
using (SolidBrush b = new SolidBrush(Color.Black)) {
using (Pen p = new Pen(b)) {
float x = ratio.Width * (float)item.Location.X;
float y = ratio.Height * (float)item.Location.Y;
float w = ratio.Width * (float)item.Size.Width;
float h = ratio.Height * (float)item.Size.Height;
RectangleF r = new RectangleF(x, y, w, h);
G.DrawString(item.Text, item.Font, b, r);
}
}
}
}
РЕДАКТИРОВАТЬ 2: Мне нужен способ печати 2 или более документов на 1 странице.Ничто еще не решило этот ключевой момент.Это тот ответ, который мне нужен.