C# 中的多页打印文档

2023-12-27

请有人帮助我,我必须在 C# 中打印多页文档,我通过互联网然后使用了这段代码但不起作用,(打印一页后循环再次开始)

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        try
        {
            Graphics graphic = e.Graphics;
            SolidBrush brush = new SolidBrush(Color.Black);

            Font font = new Font("Courier New", 12);

            float pageWidth = e.PageSettings.PrintableArea.Width;
            float pageHeight = e.PageSettings.PrintableArea.Height;

            float fontHeight = font.GetHeight();
            int startX = 40;
            int startY = 30;
            int offsetY = 40;


            for (int i = 0; i < 100; i++ )
            {

             graphic.DrawString("Line: " + i, font, brush, startX, startY + offsetY);
             offsetY += (int)fontHeight;

               if (offsetY >= pageHeight)
                {

                    e.HasMorePages = true;
                    offsetY = 0;
                    return;
                }
                else
                {
                    e.HasMorePages = false;

                }
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

每当你设置e.HasMorePages = true,它只会触发printDocument1_PrintPage()再次事件处理程序。您需要为 i 保留一个类变量,这样每次打印下一页时它就不会从 0 重新开始。不要在事件处理程序中本地声明它。

private class MyPrinter
{
    private int i = 0;

    private void Print()
    {
        i = 0;
        printDocument1.Print();
    }

    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
         .....
         .....
         .....

         while (i < 100)
        {
             graphic.DrawString("Line: " + i, font, brush, startX, startY + offsetY);
             offsetY += (int)fontHeight;

               if (offsetY >= pageHeight)
                {

                    e.HasMorePages = true;
                    offsetY = 0;
                    return;
                }
                else
                {
                    e.HasMorePages = false;

                }
            i = i + 1;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的多页打印文档 的相关文章

随机推荐

  • antlr4:ATN 版本 2 预计 3

    当尝试使用生成的语法和词法分析器时 我得到 org antlr v4 runtime atn ATN 无法使用版本 2 预期为 3 反序列化 ATN 怎么了 您的解析器是使用 ANTLR 4 0 生成的 但您尝试使用 ANTLR 4 1 执
  • 让 Cython 在 Anacondas、Windows 7 64 位上与 Python 3.4 配合使用

    我刚刚使用 Anaconda Condas 在 Windows 7 64 位计算机上安装了 Python 3 4 当我运行 你好世界 cython 示例 http docs cython org src quickstart build h
  • DateTimeFormatter 无法解析日期字符串,但 SimpleDateFormat 可以

    我无法使用 LocalDate 解析方法解析此示例日期字符串 312015 代表 2015 年 1 月 3 日 有人可以帮忙吗 import java text ParseException import java text SimpleD
  • 大规模 git 历史重写后如何同步本地历史?

    这个问题可能看起来很奇怪 但在重写 100 多次提交后 我在同步 git 历史记录时遇到了问题 在我重写的机器上 一个简单的git fetch同步了一切 在另一台 mac 机器上 git sync没有帮助 但在随机删除本地后 git log
  • Clang的Parallel STL进展如何?

    根据参考参数 https en cppreference com w cpp compiler support GCC 9已经实现了C 17 并行 STL与链接标志 ltbb 但我还没有听说过 Clang 如何专注于该功能的信息 或者他们永
  • required 和 ng-required 和有什么区别?

    有什么区别required and ng required 表单验证 AngularJS 表单元素寻找required属性来执行验证功能 ng required允许您设置required属性取决于布尔测试 例如 仅需要字段 B 比如说学生号
  • PhantomJS 已崩溃 - 致命 Windows 异常,代码 0xc0000005

    我们使用 EmberJS 构建了一个应用程序 当我们使用以下命令测试应用程序时 我们收到一条失败消息ember test 这里我提到了错误信息 操作系统 Windows 8 64位 PhantomJS 2 1 1 PhantomJS err
  • 字节数组到十六进制字符串

    我将数据存储在字节数组中 如何将此数据转换为十六进制字符串 我的字节数组的示例 array alpha 133 53 234 241 Using str format http docs python org 2 library stdty
  • 从已加载的 Magento 模型中检索附加数据

    在某些情况下 我收到的模型仅包含我需要的一些数据 例如catalog product不包含我可能需要使用的某些属性的实例 例如尺寸 小部件数量或腰围尺寸 为了缓解这个问题 我目前的选择是 创建一个新块 并使用手动加载所需的属性addAttr
  • 在 React Native 应用程序中禁用屏幕捕获/屏幕截图

    我遇到过一些专门针对 ios 和 Android 的解决方案 用于防止屏幕捕获和截屏 但是如何在 React Native 中禁用屏幕捕获呢 Android Inside android app src main java com Proj
  • 如何在选择查询中生成自动增量字段

    例如我有一个有 2 列的表 first name and last name具有这些值 Ali Khani Elizabette Amini Britney Spears 我想写一个select生成如下表的查询 1 Ali Khani 2
  • Visual Studio 2015 Update 2 团队资源管理器缺少“排除”

    我一直在 Visual Studio 2015 的 Team Explorer 部分中使用 Git 集成 我的解决方案中有许多配置文件需要修改 以便应用程序在本地运行 但我不想提交这些更改 在 VS2015 Update 1 中 Git 集
  • Google Sheets、带有服务帐户的 JWT 客户端

    我要拔头发了 帮助 更新 我正在使用 google auth library v1 0 0 和 googleapis v24 0 0 const JWT require google auth library var google requ
  • 如何使用 NLTK 分词器去除标点符号?

    我刚刚开始使用 NLTK 不太明白如何从文本中获取单词列表 如果我使用nltk word tokenize 我得到单词和标点符号的列表 我只需要文字 我怎样才能摆脱标点符号 还word tokenize不适用于多个句子 点被添加到最后一个单
  • Slick 3.1 - 检索列的子集作为案例类

    我正在使用 Slick 3 1 1 问题是在某些情况下我想省略一些相当重的列 但仍然将该列的子集具体化为案例类 考虑下面的表定义 class AuditResultTable tag Tag extends Table AuditResul
  • 如何在Unity3d中谷歌表单的另一个部分添加值

    如何在 unity3d 中的 Google 表单的其他部分添加价值 我只能在第 1 部分添加值 在其他部分添加值时遇到问题 这是代码 public GameObject username public GameObject email pu
  • C#中通过名称获取变量

    有没有一种方法可以通过知道变量的名称来获取变量的值 如下所示 double temp double MyClass GetValue VariableName 当我通常像这样访问变量时 double temp MyClass Variabl
  • Windows 窗体的 BackgroundWorker 替代品

    是否可以在 Windows 窗体应用程序中执行类似的操作 我正在尝试寻找其他更新 UI 的方法 而不是一直使用 BackgroundWorker 也许是这样的 public List
  • 从 JAVA 应用程序使用 SSL 连接到 MongoDb

    我有一个MongoDb实例运行 单实例 SSL已启用 我可以通过以下方式连接到它RoboMongo在哪里SSL选项卡我提供以下内容 CA File path to my certificate testCA pem PEM certific
  • C# 中的多页打印文档

    请有人帮助我 我必须在 C 中打印多页文档 我通过互联网然后使用了这段代码但不起作用 打印一页后循环再次开始 private void printDocument1 PrintPage object sender System Drawin