使用 PrintDocument 打印多页

2024-01-27

我正在尝试打印发票。发票应该能够在多页上打印,但这就是问题出现的地方。我可以在单页上完美地打印发票,但是一旦发票不适合在单页上打印,打印作业就会退出第一页。

这是我正在使用的代码。 'artikelen' 是文章列表(List)。我读过几个类似的例子,我相当确定我在这里遗漏了一些东西。

(编辑:删除了一些不必要的代码)

public void PrintA4Factuur()
    {
        p = new PrintDocument();
        p.PrintPage +=
            new PrintPageEventHandler(printPage);
        printPreviewDialog.Document = p;
        printPreviewDialog.ShowDialog();
    }

void printPage(object sender1, PrintPageEventArgs e1)
    {
Graphics g = e1.Graphics;
int yPos = 320;
float pageHeight = e1.MarginBounds.Height;
int artikelPosition = 0;
while (yPos + 100 < pageHeight
            && artikelPosition < this.artikelen.Count)
        {
            // Do stuff with articles (printing details in different rectangles

            artikelPosition += 1;
            yPos += 20;
        }

        if (artikelPosition < this.artikelen.Count)
        {
            e1.HasMorePages = true;
            return;
        }
        else
        {
            e1.HasMorePages = false;
        }
}

好吧,拉斯指出了重置的问题artikelPosition在每个页面的开头为零,但是此代码还存在一些其他问题。

你应该总是使用e1.MarginBounds对于坐标,因为用户可以更改边距,并且p.DefaultPageSettings不会包括那个。

使用字体指标,例如GetHeight(yourDeviceGraphPort),不要硬编码行高。

总是使用floats 为坐标,不进行相互转换ints.

字体是非托管资源,您必须Dispose当你用完它们时。在循环中重复创建和处理字体效率低下;在调用之前构造它PrintDocument.Print()并在打印完所有页面后将其丢弃。

还有一个 Black SolidBrush 已经定义在System.Drawing.

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

使用 PrintDocument 打印多页 的相关文章

  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • PHP,从日期获取明天的日期

    我有一个 PHP 日期 格式为2013 01 22我想以相同的格式获取明天的日期 例如2013 01 23 这怎么可能用 PHP 实现呢 Use DateTime http php net manual en book datetime p
  • .Net毛伊岛如何连接

    对不起 我的英语不好 如何将 SQL Server 与 Net Maui 连接 我在网上尝试了很多方法 但都失败了 我尝试导入 Ado net 但显示错误 错误显示 该项目的目标框架不包含实体框架运行时汇编 首先 您应该配置应用程序常量 配
  • 从 CDN 包中删除 Babel(StandAlone) 警告消息

    我们在项目的某些部分使用 React JS CDN 出于质量目的 我们希望向客户提供无警告的代码 我们正在使用以下库 问题是我们在控制台中收到以下警告消息 您
  • 现在还值得学习微软基础课程(MFC)吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是微软技术的忠实粉丝 学习了很多 NET Framework 和 C 之类的编程语言 但我相信 NET 应用程序是在 NET Framewor
  • 调整 NSMutableAttributedString 的字体大小与 UILabel 的框架高度成比例

    在我的项目中 我使用迅捷3 0 现在我正在使用以下课程 UILabel 子类 根据 UILabel 框架高度调整字体大小 当 UILabel 框架发生更改时 layoutSubviews 会重新计算比例字体大小 class Label UI
  • 如何查看AWS ELB后面运行的SSH服务器的SSH客户端的真实IP

    我们在 AWS classic ELB 后面运行两个 gitlab 实例 为了启用 git SSH 推送并通过 git 负载平衡 SSH 请求 我们在 AWS ELB 中添加了 SSH TCP 端口侦听器 在 SSH 日志中 我们看到 EL
  • 创建热图时出错 - 外部函数调用中的 NA/NaN/Inf (arg 11)

    我正在尝试为我的数据准备热图 但我不知道为什么会出现此错误 My data gt dput head tbl ready structure c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 370330677123077 0 0
  • Firebase Cloud Messaging (FCM) 如何切换 Apple 推送通知服务 (APN) 的环境?

    在 Apple 推送通知服务 APN 中 服务器端开发人员必须选择环境类型 沙箱或生产 作为 HTTP 2 URL api sandbox push apple com 或 api push apple com 1 https develo
  • jquery fullcalendar 事件过滤

    有没有什么方法可以在全日历中动态过滤客户端事件 当我从服务器 json encoded 获取事件时 我将自己的参数 school id 分配给每个事件 fullcalendar 准备好后 我想用 select 动态过滤事件 我在页面上添加
  • 升级 SonarQube 问题

    我在安装实例时遇到问题SonarQube4 4至5 1 The 指示 http docs sonarqube org display SONAR Upgrading比如说停止 SonarQube 服务器 匹配几个文件 备份数据库 复制插件等
  • React Hooks:在 Socket.io 处理程序内部调用时状态未更新

    const questionIndex setQuestionIndex useState 0 socket on next gt console log hey setQuestionIndex questionIndex 1 useEf
  • 使用 ptrace 解析 Call 和 Ret。

    我尝试使用 ptrace 解析可执行文件中的所有 Calls 和 Rets 符合x64操作码 http ref x86asm net coder64 html 我找到了操作码呼叫 0xe8并为重试 0xc3 0xc2 0xca 0xcb 自
  • Slurm 多处理 Python 作业

    我有一个 4 节点 Slurm 集群 每个节点有 6 个核心 我想提交一个利用多重处理的测试 Python 脚本 它会生成打印正在运行的节点的主机名的进程 如下所示 def print something print gethostname
  • 仅限水平滚动!

    我有一个包含水平菜单的菜单 菜单由无序列表组成 我希望每当菜单超出宽度时 div 都会获得水平滚动条 div 我尝试使用这些 CSS 定义 div position absolute width 380px overflow auto ov
  • 输入“用户|未定义”不可分配给类型“用户”

    用户控制器 import User from user export class UserController public static async getuser ctx BaseContext const userRepository
  • Safari 中的 CSS 过渡变换 z-index 冲突(适用于 Chrome / FF)

    我正在尝试使用 CSS 过渡和旋转效果来显示名片 我在 Chrome 和 FF 中一切正常 但在 Safari 中它扭曲了 div 我尝试应用以下属性但无济于事 transform translateZ 0px transform styl
  • d3 力定向图中的缩放和刷动

    我在执行缩放时让 D3 执行正确的刷牙时遇到问题 我在这里创建了一个 jsFiddlehttp jsfiddle net Gwp25 2 http jsfiddle net Gwp25 2 用我在其他地方找到的一些虚拟数据显示网络 接下来的
  • 以编程方式将音乐添加到 iOS

    假设我想创建一个从互联网下载音乐文件的 iOS 应用程序 那么是否可以将此音乐文件放在音乐库中以便我可以播放它 这是不可能的 将音乐添加到资料库的唯一方法是通过 iTunes 或 iTunes Store 应用程序 即使您确实找到了一种方法
  • 通过使用 React 按钮设置状态来循环遍历数组中的对象

    所以我有一些想要循环浏览的数据 const data names name Jordan additional data name Holly additional data name Sean additional data Using
  • 使用 PrintDocument 打印多页

    我正在尝试打印发票 发票应该能够在多页上打印 但这就是问题出现的地方 我可以在单页上完美地打印发票 但是一旦发票不适合在单页上打印 打印作业就会退出第一页 这是我正在使用的代码 artikelen 是文章列表 List 我读过几个类似的例子