• C# 将多个office文件转换及合并为一个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文件然后再合并到一起。

  • 相关阅读:
    使用递归,计算斐波那契数列
    Javascript模块化编程 require.js使用详解
    逻辑很重要:一句sql语句的事,自己却想了半天,绕了个大弯子
    select options常用操作
    select 下拉菜单Option对象使用add(elements,index)方法动态添加
    $().change事件
    jQuery验证控件jquery.validate.js使用说明
    copy(source,destination)拷贝文件
    Linux常用命令
    纯js实现分页
  • 原文地址:https://www.cnblogs.com/Yesi/p/4933009.html
Copyright © 2020-2023  润新知