缩放图像以进行打印

2024-01-10

我正在使用以下代码从 PictureBox 打印图像。 除了当图像大于打印页面时缩小图像之外,一切都很好。 我缺少一种方法来做到这一点吗?

屏幕截图,超出纸张范围的大图像:

http://a.yfrog.com/img46/63/problemsh.png http://a.yfrog.com/img46/63/problemsh.png http://a.yfrog.com/img46/63/problemsh.png

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    AddHandler PrintDocument1.PrintPage, AddressOf OnPrintPage

    With PageSetupDialog1
        .Document = PrintDocument1
        .PageSettings = PrintDocument1.DefaultPageSettings

        If PictureEdit1.Image.Height >= PictureEdit1.Image.Width Then
            PageSetupDialog1.PageSettings.Landscape = False
        Else
            PageSetupDialog1.PageSettings.Landscape = True
        End If

    End With

    PrintDialog1.UseEXDialog = True
    PrintDialog1.Document = PrintDocument1

    If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
        PrintPreviewDialog1.Document = PrintDocument1
        If PrintPreviewDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then

            PrintDocument1.DefaultPageSettings = PageSetupDialog1.PageSettings
            PrintDocument1.Print()

        End If
    End If
End Sub

Private Sub OnPrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    Dim img As Image = PictureEdit1.Image

    Dim sz As New SizeF(100 * img.Width / img.HorizontalResolution, 100 * img.Height / img.VerticalResolution)
    Dim p As New PointF((e.PageBounds.Width - sz.Width) / 2, (e.PageBounds.Height - sz.Height) / 2)
    e.Graphics.DrawImage(img, p)
End Sub

Replace:

Dim sz As New SizeF(100 * img.Width / img.HorizontalResolution, 100 * img.Height / img.VerticalResolution) 

用这样的东西来适应页面中的图像:

dim ScaleFac as integer = 100
While (ScaleFac * img.Width / img.HorizontalResolution > e.PageBounds.Width or ScaleFac * img.Height / img.VerticalResolution > e.PageBounds.Height) and ScaleFac > 2
    ScaleFac -= 1
Wend
Dim sz As New SizeF(ScaleFac * img.Width / img.HorizontalResolution, ScaleFac* img.Height / img.VerticalResolution) 

您可以使用代数来求解正确的比例因子,但我没有时间测试它,如果您不明白我做了什么,那么调试起来就会困难得多。很确定您仅通过代码就能明白我在这里试图做什么!问候。

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

缩放图像以进行打印 的相关文章

  • 将本地 HTML 文件/代码导入 Web 浏览器

    我正在尝试让本地 HTML 文件显示在WebBrowser在 VB NET 程序中 我正在使用下面的代码 但它似乎不起作用 我不明白为什么 first method WebBrowser1 Navigate index html secon
  • 在本地安全存储用于 Web 服务的密码

    我有一个应用程序 通过发送用户名和密码来对第三方 Web 服务进行身份验证 目前 我每次启动应用程序时都会在 winform 上输入密码 但我需要它自动登录 我想比更安全地存储用户名 密码 Dim username as String us
  • 如何在 vb.net 中使用 Stacktrace 返回错误行号

    我正在尝试创建某种错误捕获方法来返回错误行号 当进程中止时 我们会发送一封中止电子邮件 该电子邮件为我们提供了错误号 and 错误描述但我想知道实际上哪里出了错误 我知道你可以执行以下操作 1 code here 2 code here 3
  • Visual Studio 2022 - 编译旧应用程序时出错

    我们正在尝试在 Visual Studio 2022 中使用 VB6 32 位应用程序 编译 2002 年以来非常旧的应用程序 我们需要调试此应用程序并能够在 Windows 10 计算机上运行此应用程序 编译时 我们发现以下错误 这似乎是
  • 使一个对象只能被同一程序集中的另一个对象访问?

    每个业务对象都有一个包含 sql 调用的匹配对象 我想限制这些 sql 对象 使其只能由匹配的业务对象使用 如何才能实现这一目标 Update 格雷格提出了关于可测试性的观点 由于 SqlObjects 将包含非常特定于业务流程的 sql
  • 如何在vb.net中对datagridview的3列进行排序

    下面我想对 ProductCode ColorCode 和 Size 列进行排序 请指导 对 大小 列中的信息进行排序 Size Number sequence XS 1 S 2 M 3 L 4 XL 5 XXL 6 2L 7 3L 8 4
  • Vb中读取USB存储设备的序列号

    是否可以使用VB读取USB驱动器的序列号 这将为您提供 net 中驱动器的信息 包括 USB 设备 只需导入这些 导入脚本 导入系统 IO Private Class USBsn Private Sub Button1 Click ByVa
  • 为什么 True 等于 -1

    我想知道为什么 True 等于 1 而不是 1 如果我没记错的话 以前 在 C 语言中 true 将等于 1 Dim t f As Integer t True f False Console WriteLine t 1 Console W
  • VB.NET 类或模块的用途是什么?

    这里是新手酱 所以 我试图找到答案 但找不到 拥有类或模块的目的是什么 我读到的所有内容都试图告诉我它是什么 但不是它的用途 为什么我需要制作一个 我读到的所有内容似乎都对阅读教程的人做出了假设 就好像我知道很多一样 模块实际上与仅包含共享
  • 什么可能会在一台服务器上导致此错误,而在另一台服务器上则不会?

    我们有一个连接到外部 Web 服务的 ASP Net 网站 几天前它突然停止工作 基本代码是这样的 Try request New ExternalWebService ProcessRequestService Error occurs
  • 在 VB2010 Windows 窗体开始时播放 .wav/.mp3 文件?

    制作 VB2010 已经大约一年了 最近开始突破我可以将哪种媒体合并到我的表单中的界限 但我无法播放 wav 或 mp3 文件 我尝试按照微软和其他编码网站上的教程进行操作 但没有成功 任何帮助 将不胜感激 要播放波形文件 您可以简单地使用
  • 我应该如何在 VB.NET 中进行转换?

    所有这些都相等吗 在什么情况下我应该选择其中一个而不是其他 var ToString CStr 变量 CType 变量 字符串 DirectCast 变量 字符串 编辑 来自的建议不是我自己 https stackoverflow com
  • .net 的自动完成文本框,支持分隔符

    我正在开发一个应用程序 它需要一个带有多个单词的自动完成 建议 下拉 的文本框 由空格等分隔符分隔 就像 StackOverflow 中的标签文本框一样 例如 我开始输入 app 它应该显示建议列表中以以下内容开头的所有单词app 当我输入
  • VB6 HTTP 请求到 VB.Net 2.0 的转换

    我正在尝试将旧版 VB6 组件 不是我编写的 更新到 NET 平台 有一个函数可以将 XML 字符串发送到 URL Function PostToUrl ByRef psUrl ByRef psData Byref psResponseTe
  • 将 DataTable 的单列转换为 CSV

    使用 VB NET 将 DataTable 的单列转换为 CSV 的最简洁方法是什么 这些值是整数 所以我不需要担心字符转义或编码 转换为 CSV 是什么意思 如果你想生成一个以逗号分隔值的字符串 你可以使用 this tbl是你的数据表和
  • Excel 单元格对齐:例如数值xlLeft、xlRight 还是 xlCenter?

    我一直在尝试对齐 Excel 单元格文本值 我尝试过更常见的xlLeft xlRight但这似乎不起作用 错误是xlLeft没有宣布 我正在使用 Visual Studios 并使用 VB 创建一个 aspx 页面 这是我的代码示例 Dim
  • 在 ASP.Net 2008 或更高版本中创建复合和自定义网格控件[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 请建议我如何创建复合网格 即 我需要 Framework 3 5 及更高版本中 gridview 的所有功能 但还需要在
  • 创建一个从系统托盘运行的程序

    我想创建一个从 Windows 右下角系统托盘运行的程序 但我不知道从哪里开始 有人可以告诉 告诉我在哪里查找和示例或使用什么命令 研究吗 Add a NotifyIcon到主窗口窗体 使用Resize事件在Form控制何时显示Notify
  • 将参数传递给 .NET 定义的命令

    我需要在 Autocad 2000i 的命令行上编写一个命令 并且希望 autocad 提示输入参数 然后我的 vb net 程序将根据收到的参数进行操作 基本上我想我的解决方案都在这里 http through the interface
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge

随机推荐