我正在尝试将面板打印到A4尺寸的纸张上。该面板将包含一个报告,发票等,因此它应该在设计师看来完全打印。
面板的属性是,
小组的内容,
这是我工作的代码。
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)
{
Bitmap bmp = new Bitmap(panel1.Width, panel1.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);
panel1.DrawToBitmap(bmp, panel1.ClientRectangle);
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
e.Graphics.DrawImage(bmp, 0, 0, tgtWidthMM, tgtHeightMM);
}
private void button1_Click(object sender, EventArgs e)
{
int pixelsWidth = 787;
int pixelsHeight = 1114; //1 cm ~ 37.5
panel1.Size = new Size(pixelsWidth, pixelsHeight);
PrintPanel();
}
这很好用并将内容打印到pdf(我的默认打印机设置为Microsoft pdf打印机)。问题是内容没有填满A4纸,它只是侧面如下所示:
修改
我发布问题后立即发现错误。单击按钮时,我正在设置面板高度和宽度。这些值大于设计者中设置的值,并且标签未锚定。只需注释掉panel1.Size = new Size(pixelsWidth, pixelsHeight);
行。事情变得更好。
虽然标签似乎有点像素化,有没有办法让它有更清晰的分辨率?
答案 0 :(得分:0)
你已经进行了大量的调整,看起来你的比率是罪魁祸首。
generalize
,return . runIdentity :: Monad m => Identity a -> m a
width=420
,
height=594
)对于你的分辨率问题,为了简单起见,我建议你在单个单元(像素)中工作,并使用整数(因为位图不适用于小数 - 即没有像半像素那样)
我建议如果您要使用位图在A4上打印,请尝试以像素为单位获取A4宽度/高度的整数度量,并从那里开始工作。