C# 打印字符串和照片

C# 打印字符串和照片,c#,.net,winforms,printing,C#,.net,Winforms,Printing,我正在打印一些字符串和照片。我有一个包含这些控件的面板。我正在下面添加我的代码。在代码中,DataTable以字符串格式包含控件的位置和大小 第一个是面板和控件的图像。第二幅图显示运行代码后PrintPreviewDialog如何显示文档 图片和代码发布在下面 private void printMenu_Click(object sender, EventArgs e) { printPreviewDialog.Document = printDocument; printPr

我正在打印一些字符串和照片。我有一个包含这些控件的面板。我正在下面添加我的代码。在代码中,DataTable以字符串格式包含控件的位置和大小

第一个是面板和控件的图像。第二幅图显示运行代码后PrintPreviewDialog如何显示文档

图片和代码发布在下面

private void printMenu_Click(object sender, EventArgs e)
{
    printPreviewDialog.Document = printDocument;
    printPreviewDialog.ShowDialog();
}

private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    var cvt = new FontConverter();

    int resX = PrnOpra.GetPrinterResolutionX(this.selectPrinterComboBox);
    int resY = PrnOpra.GetPrinterResolutionY(this.selectPrinterComboBox);
    Graphics g = e.Graphics;

    float scale = resX / ScrnRes;
    int bitmapHeight = 3517;
    int bitmapWidth = 1020;
    Bitmap bm = new Bitmap(bitmapWidth, bitmapHeight);

    g.DrawImage(System.Drawing.Image.FromFile(Application.StartupPath + @"\Resources\Item_Photos\" + dtItemsToBePrinted.Rows[u][c].ToString()),
                            pointItemPhoto.X, pointItemPhoto.Y, sizeItemPhoto.Width, sizeItemPhoto.Height);
    g.DrawString(dtItemsToBePrinted.Rows[u][c].ToString(),
                        cvt.ConvertFromString(font) as Font,
                        new SolidBrush(Color.Black),
                        pointFieldLabel.X, pointFieldLabel.Y,
                        new StringFormat());

    g.DrawImage((System.Drawing.Image)Properties.Resources.ResourceManager.GetObject(dtControls.Rows[u]["image"].ToString()),
                        float.Parse(dtControls.Rows[u]["locationX"].ToString(), CultureInfo.InvariantCulture.NumberFormat),
                        float.Parse(dtControls.Rows[u]["locationY"].ToString(), CultureInfo.InvariantCulture.NumberFormat),
                        float.Parse(dtControls.Rows[u]["width"].ToString(), CultureInfo.InvariantCulture.NumberFormat),
                        float.Parse(dtControls.Rows[u]["height"].ToString(), CultureInfo.InvariantCulture.NumberFormat));

     g.DrawString(dtControls.Rows[u]["text"].ToString(),
                        cvt.ConvertFromString(dtControls.Rows[u]["font"].ToString()) as Font,
                        new SolidBrush(Color.Black),
                        float.Parse(dtControls.Rows[u]["locationX"].ToString(), CultureInfo.InvariantCulture.NumberFormat),
                        float.Parse(dtControls.Rows[u]["locationY"].ToString(), CultureInfo.InvariantCulture.NumberFormat),
                        new StringFormat());

}

正如您在图片中所看到的,面板的格式非常好,但打印时控件出现错误。有什么问题吗?

我知道怎么了。我将错误的位置值保存到datatable。我保存了控制。从顶部到位置.X,从左侧到位置.Y。现在印刷得很好