C# 将多个office文件转换及合并为一个PDF文件

简介: PDF文件介绍 PDF(Portable Document Format )文件源于20世纪90年代初期,如今早已成为了一种最流行的的文件格式之一。因为PDF文件有很多优点: 支持跨平台和跨设备共享 可以通过密码保护方式来阻止复制和编辑 将各种文本文档、图片、音频、三维地图等合并为一个PDF文件时,依然可以完好的保存所有的源文件信息等 因此,有些时候为了方便共享文件,你可能需要把其他格式的文件如Word,Excel以及 PowerPoint文件转换为PDF格式。

PDF文件介绍

PDF(Portable Document Format )文件源于20世纪90年代初期,如今早已成为了一种最流行的的文件格式之一。因为PDF文件有很多优点:

  • 支持跨平台和跨设备共享

  • 可以通过密码保护方式来阻止复制和编辑

  • 将各种文本文档、图片、音频、三维地图等合并为一个PDF文件时,依然可以完好的保存所有的源文件信息等

因此,有些时候为了方便共享文件,你可能需要把其他格式的文件如Word,Excel以及 PowerPoint文件转换为PDF格式。本文将向你介绍如何使用Spire.Office软件,通过C#编程的方式,

将多个office文件转换及合并到一个PDF文件。并且在转换过程中,你还可以根据自己的需要来改变PDF文件的尺寸。

 

Spire.Office简介 

Spire.Office是一款强大的.NET类库,通过它,编程者可以在任何一个.NET平台上操作MS Word,Excel,PowerPoint和PDF文档。首先,请在e-iceblue website上下载Spire.Office软

件,其次添加相关的.dll文件引用至Visual Studio。

                       

下面我们就来看看怎样通过这款软件来实现上述要求的功能。

代码片段:

第一步:创建一个winform应用程序,定义Form1并像下图这样设置;

 

第二步:定义btnAdd_Click方法,通过OpenFileDialog、添加文件路径到listbox来选择目标文件;

private void btnAdd_Click(object sender, EventArgs e)
{
    OpenFileDialog ofd = new OpenFileDialog();
    ofd.Filter = "All files (*.docx, *.pdf, *.pptx, *.pdf)|*.docx;*.pdf;*.pptx;*.xlsx";
    ofd.Multiselect=true;
    if (DialogResult.OK == ofd.ShowDialog())
    {
        string[] files = ofd.FileNames;
        listBox1.Items.AddRange(files);
    }
}


第三步:通过MemoryStream将不同格式的文件转换为PDF文件,然后把它们合并为一个PDF文件。

值得指出的是,当你将不同类型的文件合并为一个PDF文件时,你会发现不同类型的文件大小也不相同。例如,PowerPoint文件的页面大小和Word或Excel文件的页面大小完全不同。如果你

想保持合并文档的整洁美观,可以创建一个新的、页面大小固定的PDF文件,然后复制合并文件的内容到这个新的PDF文件里面。

private void btnMerge_Click(object sender, EventArgs e)
{
    //将其他格式的文件转换为PDF文件
    string ext=string.Empty;
    foreach (object item in listBox1.Items)
    {
        ext=Path.GetExtension(item.ToString());
        switch (ext)
        {
            case ".docx":
                using (MemoryStream ms = new MemoryStream())
                {
                    Document doc = new Document(item.ToString());
                    doc.SaveToStream(ms, Spire.Doc.FileFormat.PDF);
                    PdfFiles.Add(new PdfDocument(ms));
                }
                break;
            case ".pdf":
                PdfFiles.Add(new PdfDocument(item.ToString()));
                break;
            case ".pptx":
                using (MemoryStream ms = new MemoryStream())
                {
                    Presentation ppt = new Presentation(item.ToString(),Spire.Presentation.FileFormat.Auto);
                    ppt.SaveToFile(ms,Spire.Presentation.FileFormat.PDF);
                    PdfFiles.Add(new PdfDocument(ms));
                }
                break;
            case ".xlsx":
                using (MemoryStream ms = new MemoryStream())
                {
                    Workbook xls = new Workbook();
                    xls.LoadFromFile(item.ToString());
                    xls.SaveToStream(ms, Spire.Xls.FileFormat.PDF);
                    PdfFiles.Add(new PdfDocument(ms));
                }
                break;
            default:
                break;
        }              
    }
    //将多个PDF文件合并为一个PDF文件
    PdfDocument newPdf1 = new PdfDocument();
    foreach (PdfDocument doc in PdfFiles)
    {
        newPdf1.AppendPage(doc);
    }
    //创建一个新的、页面大小固定的PDF文件,复制合并文件的内容到该新的PDF文件
    PdfDocument newPdf2 = new PdfDocument();
    foreach (PdfPageBase page in newPdf1.Pages)
    {
        PdfPageBase newPage = newPdf2.Pages.Add(PdfPageSize.A4, new PdfMargins(0));
        PdfTextLayout loLayout = new PdfTextLayout();
        loLayout.Layout = PdfLayoutType.OnePage;
        page.CreateTemplate().Draw(newPage, new PointF(0, 0), loLayout);
    }
    //保存目标PDF文件
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "Pdf files(*.pdf)|*.pdf";
    if (DialogResult.OK == sfd.ShowDialog())
    {
        newPdf2.SaveToFile(sfd.FileName);
    }
}
点击加号查看全部代码

 

第四步:运行程序,点击“Add Files” 按钮来添加目标文件到listbox;

 

第五步:点击“Merge”按钮来转换和合并不同格式的文件至一个PDF文件,然后保存该文件;

 

全部代码:

using System.Drawing;
using System.Windows.Forms;
using Spire.Pdf;
using Spire.Doc;
using Spire.Xls;
using Spire.Presentation;
using System.IO;
using Spire.Pdf.Graphics;

namespace ConvertAndMerge
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            PdfFiles = new List();
        }
        public List PdfFiles { get; set;}

        //添加文件到 listbox
        private void btnAdd_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "All files (*.docx, *.pdf, *.pptx, *.pdf)|*.docx;*.pdf;*.pptx;*.xlsx";
            ofd.Multiselect=true;
            if (DialogResult.OK == ofd.ShowDialog())
            {
                string[] files = ofd.FileNames;
                listBox1.Items.AddRange(files);
            }
        }

        private void btnMerge_Click(object sender, EventArgs e)
        {
            //将其他格式的文件转换为PDF文件
            string ext=string.Empty;
            foreach (object item in listBox1.Items)
            {
                ext=Path.GetExtension(item.ToString());
                switch (ext)
                {
                    case ".docx":
                        using (MemoryStream ms = new MemoryStream())
                        {
                            Document doc = new Document(item.ToString());
                            doc.SaveToStream(ms, Spire.Doc.FileFormat.PDF);
                            PdfFiles.Add(new PdfDocument(ms));
                        }
                        break;
                    case ".pdf":
                        PdfFiles.Add(new PdfDocument(item.ToString()));
                        break;
                    case ".pptx":
                        using (MemoryStream ms = new MemoryStream())
                        {
                            Presentation ppt = new Presentation(item.ToString(),Spire.Presentation.FileFormat.Auto);
                            ppt.SaveToFile(ms,Spire.Presentation.FileFormat.PDF);
                            PdfFiles.Add(new PdfDocument(ms));
                        }
                        break;
                    case ".xlsx":
                        using (MemoryStream ms = new MemoryStream())
                        {
                            Workbook xls = new Workbook();
                            xls.LoadFromFile(item.ToString());
                            xls.SaveToStream(ms, Spire.Xls.FileFormat.PDF);
                            PdfFiles.Add(new PdfDocument(ms));
                        }
                        break;
                    default:
                        break;
                }              
            }
            //将多个PDF文件合并为一个PDF文件
            PdfDocument newPdf1 = new PdfDocument();
            foreach (PdfDocument doc in PdfFiles)
            {
                newPdf1.AppendPage(doc);
            }
            //创建一个新的、页面大小固定的PDF文件,复制合并文件的内容到该新的PDF文件
            PdfDocument newPdf2 = new PdfDocument();
            foreach (PdfPageBase page in newPdf1.Pages)
            {
                PdfPageBase newPage = newPdf2.Pages.Add(PdfPageSize.A4, new PdfMargins(0));
                PdfTextLayout loLayout = new PdfTextLayout();
                loLayout.Layout = PdfLayoutType.OnePage;
                page.CreateTemplate().Draw(newPage, new PointF(0, 0), loLayout);
            }
            //保存目标PDF文件
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "Pdf files(*.pdf)|*.pdf";
            if (DialogResult.OK == sfd.ShowDialog())
            {
                newPdf2.SaveToFile(sfd.FileName);
            }
        }
    }
}


注意:

使用此方法来将多个office文件合并到一个PDF文件,排版可能会改变,因为不同文件的所有内容都会显示在一个固定的大小的页面上(例如A4)。如果你想保存原来的排版格式,只需要先把

它们转换成PDF文件然后再合并到一起。

 

目录
相关文章
|
21天前
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
43 3
|
2月前
|
安全 搜索推荐 iOS开发
WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑
WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑
114 8
WPS Office for Mac 7.3.1 - 写作、表格处理、PPT 制作和 PDF 编辑
|
3月前
|
人工智能 文字识别 自然语言处理
1.6K star!这个开源文本提取神器,5分钟搞定PDF/图片/Office文档!
Kreuzberg 是一个基于 Python 的文本提取库,支持从 PDF、图像、Office 文档等 20+ 格式中提取文本内容。采用 MIT 开源协议,具备本地处理、异步架构、智能 OCR 等特性,特别适合需要隐私保护的文档处理场景。
161 1
|
6月前
|
C#
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
123 9
|
8月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
146 1
|
8月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
320 0
|
10月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
9月前
|
安全
猿大师办公助手在线编辑微软Office/金山wps网页组件COM加载项启用说明
猿大师办公助手是一款独特的在线编辑Office插件,不同于其他厂商的弹窗模式,它真正实现了网页内嵌本机Office。其COM加载项可在Office主菜单栏增加PageHi子菜单,提供文件保存、打印等功能,并能控制文档操作权限。安装后,默认自动启动COM加载项,但需注意可能被禁用或拦截,必要时需手动启用。对于WPS和微软Office,均有详细的启用步骤。
189 6
猿大师办公助手在线编辑微软Office/金山wps网页组件COM加载项启用说明
|
Web App开发 JavaScript 前端开发
2024年纯前端VUE在线编辑微软Office/金山WPS的Word/Excel文档
现在,随着数字化进程渗透到到各行各业,数据安全已经成为了数字化革命中的重要组成部分,而在线Office成在OA、ERP、文档系统中得到了广泛的应用,为我国的信息化事业也做出了巨大贡献。随着操作系统、浏览器及Office软件的不断升级和更新换代,加上国家对信息化、数字化系统要求的不断提升,一些厂家的WebOffice控件产品不断被淘汰出局,而现存的几个产品也存在以下几个问题:
1020 52
2024年纯前端VUE在线编辑微软Office/金山WPS的Word/Excel文档
|
10月前
|
人工智能 自然语言处理 安全
微软会将ChatGPT整合纳入Office套件吗?
微软会将ChatGPT整合纳入Office套件吗?
81 0

热门文章

最新文章