gpt4 book ai didi

C# 打印文档 : Phantom print to count total number of pages

转载 作者:行者123 更新时间:2023-11-30 17:49:43 26 4
gpt4 key购买 nike

我目前有一个功能,可以使用 System.Drawing.Printing.PrintDocument 将 DataGridView 打印到页面上 - 打印实用程序通过我的打印页面功能 (PrintDoc_PagePrint) 运行,直到它用完行(它将设置的位置) HasMorePages 为 false。)

我试图在打印前算出总页数,这样我就可以在每页的底部放置“page x of y”。一种方法是计算出每页适合多少行,并根据总共有多少行计算出多少页,但这似乎不是很通用,因为它依赖于每一行的高度相同,这取决于它的编程方式,可能并非总是如此。

我想做的是做一个“幻影”打印——或者基本上是在用户不知情的情况下在后台将它打印到一个空打印机上。当它第一次打印时,它可以在每次运行打印功能时增加一个全局变量 TotalPages,然后一旦幻像打印完成,就停止在下次打印时增加 TotalPages(大概只是在幻像打印完成后设置一个 bool 值)完成。)这将更加通用,并且适用于具有不同行高的数据网格,或我想要打印的任何其他类型的数据。

我的问题是 - 有什么方法可以在后台运行样本打印吗?这是在用户选择页面大小和方向等之后完成的,因此我们确实知道这些基本细节,但只是在显示打印预览对话框之前。

这是我的一些代码...它可以工作,但由于某种原因它并不总是有效!

// Phantom print to determine number of pages. Writes to TotalPages var.
// The next print won't write to TotalPages when FirstPreviewDone is set to true.
var printEventArgs = new PrintEventArgs();

// Create a graphics object of the page size to "print" to.
int x = 0;
int y = 0;
int width = printDoc.DefaultPageSettings.PaperSize.Width;
int height = printDoc.DefaultPageSettings.PaperSize.Height;

Rectangle marginBoundsRectangle = new Rectangle(x, y, width, height);
Rectangle pageBoundsRectangle = new Rectangle(0, 0, printDoc.DefaultPageSettings.PaperSize.Width, printDoc.DefaultPageSettings.PaperSize.Height);
Bitmap b = new Bitmap(width, height);

// Swap everything if it's in landscape.
if (printDoc.DefaultPageSettings.Landscape)
{
marginBoundsRectangle = new Rectangle(y, x, height, width);
pageBoundsRectangle = new Rectangle(0, 0, printDoc.DefaultPageSettings.PaperSize.Height, printDoc.DefaultPageSettings.PaperSize.Width);
b = new Bitmap(height, width);
}

Graphics graphics = Graphics.FromImage(b);

var printPageEventArgs = new PrintPageEventArgs(graphics, marginBoundsRectangle, pageBoundsRectangle, printDoc.DefaultPageSettings);
printPageEventArgs.HasMorePages = true;
PrintDoc_BeginPrint(null, printEventArgs);
while (printPageEventArgs.HasMorePages && !printPageEventArgs.Cancel)
{
try
{
PrintDoc_PrintPage(null, printPageEventArgs);
}
catch (Exception ex)
{
MessageBoxEx.Show(ex.Message, "Error printing - Check logs", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}

最佳答案

这已经在下面的问题中得到了回答......

Is there a better way to get the page count from a PrintDocument than this?

希望这有助于...

关于C# 打印文档 : Phantom print to count total number of pages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21321365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com