当前位置: 代码网 > it编程>编程语言>Asp.net > C#实现高效打印PDF文档的示例代码

C#实现高效打印PDF文档的示例代码

2025年06月22日 Asp.net 我要评论
一、基础打印操作详解通过adobe acrobat reader 打印(最常用)1.打开pdf:使用 acrobat reader 或其他pdf阅读器打开文件。2.访问打印设置:快捷键:ctrl +

一、基础打印操作详解

通过adobe acrobat reader 打印(最常用)

1.打开pdf:使用 acrobat reader 或其他pdf阅读器打开文件。

2.访问打印设置:

  • 快捷键:ctrl + p
  • 按钮:工具栏上的打印机图标

3.核心设置项:

a.打印机选择:从下拉菜单选择目标设备

b.打印范围:

  • 所有页面:打印整个文档
  • 当前视图:打印屏幕显示区域
  • 指定页面:输入如"1,3-5"打印第1页和第3-5页

c.页面处理:

  • 页面缩放方式:实际大小、适合页面、缩小大页面(避免内容被裁剪)。
  • 多页打印:可选择“多页”设置,在一张纸上打印多页。
  • 小册子打印:用于制作骑马钉小册子。

d.注释和表单:决定是否打印文档中的批注、表单域内容等。

e.高级选项:

作为图像打印:解决字体或格式异常问题(但可能降低质量)。

4.执行打印:确认设置后点击“打印”。

关键提示:打印前务必在预览窗口检查最后一页内容,避免因格式问题导致空白页或内容缺失!

浏览器打印(无需安装软件)

在chrome/firefox/edge中打开pdf

快捷键 “ctrl + p” 调出打印界面

设置基础打印参数 如打印份数、打印范围、页面方向、缩放比例等。

一些关键设置:

  • 边距:选择"无"可最大化内容区域
  • 背景图形:勾选以打印水印和背景色
  • 页眉页脚:默认关闭,需手动开启

二、自动打印方法

当需要定时、批量或无人值守打印时,手动操作效率低下。以下是两种自动化方案:

方案1:借助print conductor 软件批量自动打印

print conductor 是一款高效的批量打印工具,用户只需将多个 pdf 文件拖入其界面,配置打印参数(如打印机选择、份数、页面范围、双面模式等),即可一键自动按序打印所有文档,大幅简化重复性打印任务。

方法2:通过 c# 编程实现自动打印(免费.net库)

在.net 开发领域中,有时可能会需要将打印 pdf 的功能集成到应用程序中。这个时候可以借助国产 免费库 free spire.pdf for .net  通过c# 代码实现pdf文档打印,无需安装adobe。(需注意免费版有页数限制)

安装免费.net库:在 “nuget包管理器” 中搜索 “freespire.pdf” 并安装。

基本pdf打印示例:下面是一个简单c#代码演示了如何将指定的 pdf 文件打印到系统默认的打印机上:

using spire.pdf;
 
namespace printwithdefaultprinter
{
    class program
    {
        static void main(string[] args)
        {
            // 创建一个 pdfdocument 对象
            pdfdocument pdf = new pdfdocument();
 
            // 加载一个 pdf 文件
            pdf.loadfromfile("示例文档.pdf");
 
            // 打印到默认打印机
            pdf.print();
 
            // 清理资源
            pdf.dispose();
 
        }
    }
}

除了简单打印之外, 该免费pdf库还支持自定义打印设置,例如选择特定的打印机设置打印页面范围调整打印份数静默打印将不同页面打印到不同纸盒

方法补充

c# 打印pdf的常用方法

1.使用默认程序打印

using system;
using system.collections.generic;
using system.diagnostics;
using system.drawing.printing;
using system.io;
using system.runtime.interopservices;

namespace pdf
{
    public static class printhelper
    {
        #region 打印机操作核心方法

        /// <summary>
        /// // 设置默认打印机
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        [dllimport("winspool.drv")]
        public static extern bool setdefaultprinter(string name);

        /// <summary>
        /// 获取系统默认打印机名称
        /// </summary>
        public static string defaultprintername()
        {
            printdocument fprintdocument = new printdocument();
            return fprintdocument.printersettings.printername;
        }

        /// <summary>
        /// 获取本机所有打印机列表
        /// </summary>
        public static list<string> getlocalprinters()
        {
            list<string> fprinters = new list<string>();
            fprinters.add(defaultprintername());

            foreach (string fprintername in printersettings.installedprinters)
            {
                if (!fprinters.contains(fprintername))
                {
                    fprinters.add(fprintername);
                }
            }
            return fprinters;
        }

        /// <summary>
        /// 设置指定打印机为默认打印机
        /// </summary>
        public static bool setlocalprinter(string defaultprinter)
        {
            foreach (string item in getlocalprinters())
            {
                if (item.contains(defaultprinter))
                {
                    return setdefaultprinter(item);
                }
            }
            return false;
        }

        #endregion

        /// <summary>
        /// 打印
        /// 通过系统关联程序打印文件
        /// 需注意的是,这种方式依赖于文件类型的默认关联程序
        /// </summary>
        public static void printbydefaultprocess(string localpath)
        {
            process p = new process();
            processstartinfo startinfo = new processstartinfo
            {
                createnowindow = true,
                windowstyle = processwindowstyle.hidden,
                useshellexecute = true,
                filename = localpath,
                verb = "print",  // 它会调用与文件类型关联的默认应用程序来执行打印文件,如adobe reader或者word或图片查看器或其他pdf阅读器进行打印
                arguments = $"/p /h \"{localpath}\" \"{defaultprintername()}\"",
                //workingdirectory = path.getdirectoryname(application.executablepath)   // 设置工作目录为应用程序启动目录
            };
            p.startinfo = startinfo;
            p.start();
            p.waitforexit(5); // 等待5秒钟,确保打印任务已提交
        }
    }
}

需要注意的是,它虽然是一种简单且常用的方法。但这种方法依赖于系统关联的默认应用程序来处理打印任务,适用于大多数情况,但存在一些限制和潜在问题。如pdf后缀没有关联默认程序会报错。

所以我一般不会使用这种方式。

下面会罗列其他的方法和优缺点

2.使用命令行工具(如 adobe reader 的 /t 参数)​

public static void printwithadobecommandline(string filepath, string printername)
{
    string adobepath = @"c:\program files\adobe\acrobat reader dc\reader\acrord32.exe";
    process.start(adobepath, $"/t \"{filepath}\" \"{printername}\"");
}

优点​:绕过默认应用程序,强制使用 adobe reader。

​缺点​:需硬编码 adobe 路径,可能因版本或安装位置不同失效。

3.直接调用 adobe acrobat 的 com 接口

如果系统中安装了 adobe acrobat pro,可以通过 com 对象直接控制打印:

using adobe.acrobat;

public static void printwithadobepdf(string filepath)
{
    acrobat.acroapp app = new acrobat.acroapp();
    acrobat.acroavdoc avdoc = new acrobat.acroavdoc();

    if (avdoc.open(filepath, ""))
    {
        acrobat.acropddoc pddoc = (acrobat.acropddoc)avdoc.getpddoc();
        pddoc.printpages(0, 0, 0, 0, 0, 0, 0); // 参数需根据需求调整
        avdoc.close(true);
    }
    app.exit();
}

优点​:直接控制 adobe 软件,可靠性高。

​缺点​:依赖 adobe acrobat pro,非免费版;需处理 com 引用和资源释放。

4. 使用 .net 的 printdocument 类​

结合 system.drawing 处理 pdf(需将 pdf 渲染为图像):

public static void printpdfasimage(string filepath)
{
    using (var document = pdfdocument.load(filepath)) // 需要 pdfiumviewer 或其他库
    {
        var printdoc = new system.drawing.printing.printdocument();
        printdoc.printpage += (sender, e) =>
        {
            e.graphics.drawimage(document.rendertoimage(), e.marginbounds);
            e.hasmorepages = false;
        };
        printdoc.print();
    }
}

**优点​:纯 .net 实现。

缺点​:**渲染质量依赖库,可能丢失文本选中等特性。

到此这篇关于c#实现高效打印pdf文档的示例代码的文章就介绍到这了,更多相关c#打印pdf内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com