打印带有图像的格式化文本

时间:2018-08-21 11:48:51

标签: c# winforms

我一直在寻找长时间打印面板(PanelContain)中格式化的文本和图像的方法,但是还没有打印格式化的文本和图像。请告诉我早期使用Rich文本框的哪个文本框支持但是它不能在位图中转换,所以我得到的是空白文本框。 请帮助我。这对我的项目非常重要。

这是我的代码:

private void PrintPanel()
{
    System.Drawing.Printing.PrintDocument doc = new PrintDocument();
    doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
    doc.Print();
}

private void doc_PrintPage(object sender, PrintPageEventArgs e)
{
    try
    {
        RichTxtRptBody.BorderStyle = BorderStyle.None;
        Bitmap bmp = new Bitmap(PanelContain.Width,  
        PanelContain.Height);
        float tgtWidthMM = 210;  //A4 paper size
        float tgtHeightMM = 297;
        float tgtWidthInches = tgtWidthMM / 25.4f;
        float tgtHeightInches = tgtHeightMM / 25.4f;
        float srcWidthPx = bmp.Width;
        float srcHeightPx = bmp.Height;
        float dpiX = srcWidthPx / tgtWidthInches;
        float dpiY = srcHeightPx / tgtHeightInches;
        bmp.SetResolution(dpiX, dpiY);

        PanelContain.DrawToBitmap(bmp, PanelContain.ClientRectangle);
        e.Graphics.InterpolationMode = 
        InterpolationMode.HighQualityBicubic;
        e.Graphics.PageUnit = GraphicsUnit.Millimeter;
        e.Graphics.DrawImage(bmp, 3, 1, tgtWidthMM, tgtHeightMM-24);

    }
    catch (Exception ex)
    {

    }
}

private void toolStripBtnPrint_Click(object sender, EventArgs e)
{
    try
    {
        Img = null;
        PrintDocument doc = new PrintDocument();
        PrintDialog dlgSettings = new PrintDialog();
        dlgSettings.Document = doc;
        if (dlgSettings.ShowDialog() == DialogResult.OK)
        {
            PrintPanel();
        }
    }
    catch (Exception ex)
    {

    }
}

我还提供了我的面板的快照:

2 个答案:

答案 0 :(得分:0)

您要使用格式打印富文本框内容

尝试一下:

eintragRichTextBox是一个RichTextBox

private void druckenPictureBox_Click(object sender, EventArgs e)
{
    PrintDialog printDialog = new PrintDialog();
    PrintDocument documentToPrint = new PrintDocument();
    printDialog.Document = documentToPrint;

    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        StringReader reader = new StringReader(eintragRichTextBox.Text);
        documentToPrint.PrintPage += new PrintPageEventHandler(DocumentToPrint_PrintPage);
        documentToPrint.Print();
    }
}

private void DocumentToPrint_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    StringReader reader = new StringReader(eintragRichTextBox.Text);
    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.eintragRichTextBox.Font;
    SolidBrush PrintBrush = new SolidBrush(Color.Black);

    LinesPerPage = e.MarginBounds.Height / PrintFont.GetHeight(e.Graphics);

    while (Count < LinesPerPage && ((Line = reader.ReadLine()) != null))
    {
        YPosition = TopMargin + (Count * PrintFont.GetHeight(e.Graphics));
        e.Graphics.DrawString(Line, PrintFont, PrintBrush, LeftMargin, YPosition, new StringFormat());
        Count++;
    }

    if (Line != null)
    {
        e.HasMorePages = true;
    }
    else
    {
        e.HasMorePages = false;
    }
    PrintBrush.Dispose();
}

答案 1 :(得分:0)

您可以使用webbrowsercontrol动态填充,然后您可以轻松打印,并以完整格式选项进行打印,因为html代码也可以帮助您进行布局。