Как я могу получить изображение, которое появляется в предварительном просмотре печати, чтобы на самом деле печатать приC#

Место общения программистов C#
Ответить
Anonymous
 Как я могу получить изображение, которое появляется в предварительном просмотре печати, чтобы на самом деле печатать при

Сообщение Anonymous »

Я использовал переполнение стека, чтобы найти ответы на многие проблемы в прошлом. Это мой первый вопрос, так как я не смог найти ответ, который на этот раз работал для моей конкретной проблемы. Я надеюсь, что вы сможете помочь, и я сделаю все возможное, чтобы предоставить все детали, которые вам могут понадобиться. У меня есть приложение, которое я создал, которое в основном используется для регистрации данных по сравнению с написанием рук. Он содержит 4 столбца, у меня есть форма, которая показывает все данные, которые были введены до сих пор в DataGridView. Я пытаюсь заставить это распечатать. Я взял его на работу, используя PrintDialog и PrintDocument, однако я хотел бы проверить все это выглядит правильно перед печати. Я переключил PrintDialog с printpreviewdialog. Данные появляются на экране предварительного просмотра в порядке, но когда я затем нажимаю значок принтера в этом предварительном просмотре, я просто получаю пустую страницу. Я покончил, я считаю, что он «печатает» в окно предварительного просмотра печати, и в этот момент моя строка очищается, поэтому, когда я нажимаю на значок принтера, нечего печатать. Я просто не могу понять свой следующий шаг. Это то, что у меня есть до сих пор. < /P>
Кнопка нажатия.private void btnPrint_Click(object sender, EventArgs e)
{
printPreviewDialog1.Document = printDocument1;
this.ToolStripButton = new ToolStripButton();
this.ToolStripButton.Image = ((ToolStrip)(printPreviewDialog1.Controls[1])).ImageList.Images[0];
this.ToolStripButton.DisplayStyle = ToolStripItemDisplayStyle.Image;
this.ToolStripButton.Click += new System.EventHandler(this.printPreview_PrintClick);
((ToolStrip)(printPreviewDialog1.Controls[1])).Items.RemoveAt(0);
((ToolStrip)(printPreviewDialog1.Controls[1])).Items.Insert(0, ToolStripButton);
string strText = "";
string poBox = "PO BOX";
string clientName = "CLIENT NAME";
string breCount = "BRE COUNT";
string fcCount = "FC COUNT";

strText += poBox.PadRight(25, 'z'); //the z's here in the paddings is just to help me with column alignment and will eventually be replaced with just spaces
strText += clientName.PadRight(12, 'z');
strText += breCount.PadRight(10, 'z');
strText += fcCount.PadRight(10, 'z');
strText += "\n";

foreach (DataGridViewRow row in dataGridView.Rows)
{
poBox = row.Cells[0].Value.ToString();
strText += poBox.PadRight(25, 'z');
clientName = row.Cells[1].Value.ToString();
strText += clientName.PadRight(12, 'z');
breCount = row.Cells[2].Value.ToString();
strText += breCount.PadRight(10, 'z');
fcCount = row.Cells[3].Value.ToString();
strText += fcCount.PadRight(10, 'z');
strText += "\n";
}

myReader = new StringReader(strText);

if (printPreviewDialog1.ShowDialog() == DialogResult.OK)
{
printPreviewDialog1.ShowDialog();// Print();
}
}
< /code>
MyReader & ToolStripButton объявляется прямо в основном классе. < /p>
public partial class frmView : Form
{
private StringReader myReader;
private ToolStripButton ToolStripButton;
< /code>
my printdocument событие. < /p>
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
float linesPerPage = 0;
float yPosition = 0;
int count = 0;
float leftMargin = e.MarginBounds.Left;
float topMargin = e.MarginBounds.Top;
string line = null;
Font printFont = this.dataGridView.Font;
SolidBrush myBrush = new SolidBrush(Color.Black);

// Work out the number of lines per page, using the MarginBounds.
linesPerPage =
e.MarginBounds.Height / printFont.GetHeight(e.Graphics);

// Iterate over the string using the StringReader, printing each line.
while (count < linesPerPage && ((line = myReader.ReadLine()) != null))
{
// calculate the next line position based on
// the height of the font according to the printing device
yPosition = topMargin + (count * printFont.GetHeight(e.Graphics));

// draw the next line in the rich edit control

e.Graphics.DrawString(line, printFont,
myBrush, leftMargin,
yPosition, new StringFormat());
count++;
}

// If there are more lines, print another page.
if (line != null)
e.HasMorePages = true;
else
e.HasMorePages = false;

myBrush.Dispose();

if (!printDocument1.PrintController.IsPreview)
{
MessageBox.Show("The log was printed.","Print Status");
printPreviewDialog1.Close();
}
}
< /code>
Новое событие Preview_printclick < /p>
private void printPreview_PrintClick(object sender, System.EventArgs ee)
{
try
{
this.printDialog1.Document = printDocument1;
if (printDialog1.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message, ToString());
}
}
< /code>
Участник предложил эту статью, как -да-печать-dialog-the-printpreviewdialog. После этого это позволило мне выбрать другой принтер, если я хотел бы, однако, что принтер все еще напечатал пустую страницу, а не страницу, отображаемую в предварительном просмотре. Это удобная функция, если пользователь не хочет использовать принтер по умолчанию, поэтому я оставлю в коде, но все равно должен распечатать предварительный просмотр фактического документа, а не пустой страницу.

Подробнее здесь: https://stackoverflow.com/questions/793 ... t-when-cli
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»