前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSharp中文档转换为PDF或图片不依赖WPS或Office

CSharp中文档转换为PDF或图片不依赖WPS或Office

作者头像
码客说
发布2023-04-27 15:27:29
9550
发布2023-04-27 15:27:29
举报
文章被收录于专栏:码客码客码客

安装依赖

Install-Package Aspose.Words -Version 19.10.0
Install-Package Aspose.Cells -Version 19.10.0
Install-Package Aspose.Slides.NET -Version 19.10.0
Install-Package Aspose.PDF -Version 19.10.0

添加系统引用

System.Drawing

Word => PDF/IMG

using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.IO;
using Aspose.Words;
using Aspose.Words.Saving;
using Path = System.IO.Path;

namespace document_converter.Utils
{
    public class ConverterWord
    {
        public static void ToPdf(
            string sourcePath,
            string targetPath
        )
        {
            SetLicense();
            Document doc = new Document(sourcePath);
            doc.Save(targetPath, SaveFormat.Pdf);
        }

        /// <summary>
        /// 转换为图片
        /// </summary>
        /// <param name="sourcePath">原路径</param>
        /// <param name="targetPath">目标文件夹</param>
        /// <param name="startPageNum">开始页面</param>
        /// <param name="endPageNum">结束页面</param>
        /// <param name="imageFormat">格式</param>
        /// <param name="resolution">清晰度</param>
        /// <returns></returns>
        public static List<string> ToImage(
            string sourcePath,
            string targetPath,
            int startPageNum = 1,
            int endPageNum = int.MaxValue,
            ImageFormat imageFormat = null,
            int resolution = 128
        )
        {
            SetLicense();
            string pdfPath = Path.ChangeExtension(sourcePath, "temp");
            ToPdf(sourcePath, pdfPath);
            var imgList = ConverterPdf.ToImage(pdfPath, targetPath, startPageNum, endPageNum, imageFormat, resolution);
            if (File.Exists(pdfPath))
            {
                File.Delete(pdfPath);
            }

            return imgList;
        }

        /// <summary>
        /// 转换为图片的方法
        /// 你可以像这样调用该方法: ToImage("F:\\PdfFile.doc", "F:\\ImageFile", 1, 20, ImageFormat.Png, 256);
        /// </summary>
        /// <param name="sourcePath"></param>
        /// <param name="targetPath">
        /// 图片输出路径,如果为空,默认值为Word所在路径
        /// </param>
        /// <param name="startPageNum">
        /// 从PDF文档的第几页开始转换,如果为0,默认值为1
        /// </param>
        /// <param name="endPageNum">
        /// 从PDF文档的第几页开始停止转换,如果为0,默认值为Word总页数
        /// </param>
        /// <param name="imageFormat">
        /// 设置所需图片格式,如果为null,默认格式为JPEG
        /// </param>
        /// <param name="resolution">
        /// 设置图片的像素,数字越大越清晰,如果为0,默认值为128,建议最大值不要超过1024
        /// </param>
        public static List<string> ToImage2(
            string sourcePath,
            string targetPath,
            int startPageNum = 1,
            int endPageNum = int.MaxValue,
            ImageFormat imageFormat = null,
            float resolution = 256
        )
        {
            SetLicense();
            string imageName = Path.GetFileNameWithoutExtension(sourcePath).Replace(" ", "");

            // 返回的图片绝对路径集合
            List<string> images = new List<string>();
            try
            {
                // open word file
                Document doc = new Document(sourcePath);

                if (targetPath.Trim().Length == 0)
                {
                    targetPath = Path.GetDirectoryName(sourcePath);
                }

                if (!Directory.Exists(targetPath))
                {
                    if (targetPath != null)
                    {
                        Directory.CreateDirectory(targetPath);
                    }
                }


                if (startPageNum <= 0)
                {
                    startPageNum = 1;
                }

                if (endPageNum > doc.PageCount || endPageNum <= 0)
                {
                    endPageNum = doc.PageCount;
                }

                if (startPageNum > endPageNum)
                {
                    startPageNum = endPageNum;
                    endPageNum = startPageNum;
                }

                if (imageFormat == null)
                {
                    imageFormat = ImageFormat.Jpeg;
                }

                if (resolution <= 0)
                {
                    resolution = 128;
                }

                ImageSaveOptions imageSaveOptions = new ImageSaveOptions(GetSaveFormat(imageFormat))
                {
                    Resolution = resolution
                };

                // start to convert each page
                for (int i = startPageNum; i <= endPageNum; i++)
                {
                    imageSaveOptions.PageIndex = i - 1;
                    if (targetPath != null)

                    {
                        string pathAll = Path.Combine(
                            targetPath,
                            imageName + "_" + i + "." + imageFormat.ToString().ToLower()
                        );
                        doc.Save(
                            pathAll,
                            imageSaveOptions
                        );
                        images.Add(pathAll);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(
                    "The document appears to be corrupted and cannot be loaded.".Equals(ex.Message)
                        ? "文件似乎已损坏,无法加载。"
                        : "文件被占用请关闭后重新导入"
                );
            }

            return images;
        }

        private static void SetLicense()
        {
            new License()
                .SetLicense(
                    new MemoryStream(
                        Convert.FromBase64String(
                            "PExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5TdXpob3UgQXVuYm94IFNvZnR3YXJlIENvLiwgTHRkLjwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPnNhbGVzQGF1bnRlYy5jb208L0VtYWlsVG8+CiAgICA8TGljZW5zZVR5cGU+RGV2ZWxvcGVyIE9FTTwvTGljZW5zZVR5cGU+CiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1pdGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+CiAgICA8T3JkZXJJRD4xOTA4MjYwODA3NTM8L09yZGVySUQ+CiAgICA8VXNlcklEPjEzNDk3NjAwNjwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIGZvciAuTkVUPC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+M2U0NGRlMzAtZmNkMi00MTA2LWIzNWQtNDZjNmEzNzE1ZmMyPC9TZXJpYWxOdW1iZXI+CiAgICA8U3Vic2NyaXB0aW9uRXhwaXJ5PjIwMjAwODI3PC9TdWJzY3JpcHRpb25FeHBpcnk+CiAgICA8TGljZW5zZVZlcnNpb24+My4wPC9MaWNlbnNlVmVyc2lvbj4KICAgIDxMaWNlbnNlSW5zdHJ1Y3Rpb25zPmh0dHBzOi8vcHVyY2hhc2UuYXNwb3NlLmNvbS9wb2xpY2llcy91c2UtbGljZW5zZTwvTGljZW5zZUluc3RydWN0aW9ucz4KICA8L0RhdGE+CiAgPFNpZ25hdHVyZT53UGJtNUt3ZTYvRFZXWFNIY1o4d2FiVEFQQXlSR0pEOGI3L00zVkV4YWZpQnd5U2h3YWtrNGI5N2c2eGtnTjhtbUFGY3J0c0cwd1ZDcnp6MytVYk9iQjRYUndTZWxsTFdXeXNDL0haTDNpN01SMC9jZUFxaVZFOU0rWndOQkR4RnlRbE9uYTFQajhQMzhzR1grQ3ZsemJLZFZPZXk1S3A2dDN5c0dqYWtaL1E9PC9TaWduYXR1cmU+CjwvTGljZW5zZT4=")
                    )
                );
        }

        private static SaveFormat GetSaveFormat(ImageFormat imageFormat)
        {
            SaveFormat sf;
            if (imageFormat.Equals(ImageFormat.Png))
            {
                sf = SaveFormat.Png;
            }
            else if (imageFormat.Equals(ImageFormat.Jpeg))
            {
                sf = SaveFormat.Jpeg;
            }
            else if (imageFormat.Equals(ImageFormat.Tiff))
            {
                sf = SaveFormat.Tiff;
            }
            else if (imageFormat.Equals(ImageFormat.Bmp))
            {
                sf = SaveFormat.Bmp;
            }
            else
            {
                sf = SaveFormat.Unknown;
            }

            return sf;
        }
    }
}

Excel => PDF/IMG

using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.IO;
using Aspose.Cells;

namespace document_converter.Utils
{
    public class ConverterExcel
    {
        /// <summary>
        /// 转换为PDF
        /// </summary>
        /// <param name="sourcePath">原路径</param>
        /// <param name="targetPath">目标路径</param>
        public static void ToPdf(
            string sourcePath,
            string targetPath
        )
        {
            SetLicense();
            // 创建 Workbook 对象并加载 Excel 文件
            using (Workbook workbook = new Workbook(sourcePath))
            {
                // 创建 PDF 保存选项
                PdfSaveOptions options = new PdfSaveOptions();

                // 将 Workbook 保存为 PDF 文件
                workbook.Save(targetPath, options);
            }
        }


        /// <summary>
        /// 转换为图片
        /// </summary>
        /// <param name="sourcePath">原路径</param>
        /// <param name="targetPath">目标文件夹</param>
        /// <param name="startPageNum">开始页面</param>
        /// <param name="endPageNum">结束页面</param>
        /// <param name="imageFormat">格式</param>
        /// <param name="resolution">清晰度</param>
        /// <returns></returns>
        public static List<string> ToImage(
            string sourcePath,
            string targetPath,
            int startPageNum = 1,
            int endPageNum = int.MaxValue,
            ImageFormat imageFormat = null,
            int resolution = 128
        )
        {
            SetLicense();
            string pdfPath = Path.ChangeExtension(sourcePath, "temp");
            ToPdf(sourcePath, pdfPath);
            var imgList = ConverterPdf.ToImage(pdfPath, targetPath, startPageNum, endPageNum, imageFormat, resolution);
            if (File.Exists(pdfPath))
            {
                File.Delete(pdfPath);
            }

            return imgList;
        }

        private static void SetLicense()
        {
            new License()
                .SetLicense(
                    new MemoryStream(
                        Convert.FromBase64String(
                            "PExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5TdXpob3UgQXVuYm94IFNvZnR3YXJlIENvLiwgTHRkLjwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPnNhbGVzQGF1bnRlYy5jb208L0VtYWlsVG8+CiAgICA8TGljZW5zZVR5cGU+RGV2ZWxvcGVyIE9FTTwvTGljZW5zZVR5cGU+CiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1pdGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+CiAgICA8T3JkZXJJRD4xOTA4MjYwODA3NTM8L09yZGVySUQ+CiAgICA8VXNlcklEPjEzNDk3NjAwNjwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIGZvciAuTkVUPC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+M2U0NGRlMzAtZmNkMi00MTA2LWIzNWQtNDZjNmEzNzE1ZmMyPC9TZXJpYWxOdW1iZXI+CiAgICA8U3Vic2NyaXB0aW9uRXhwaXJ5PjIwMjAwODI3PC9TdWJzY3JpcHRpb25FeHBpcnk+CiAgICA8TGljZW5zZVZlcnNpb24+My4wPC9MaWNlbnNlVmVyc2lvbj4KICAgIDxMaWNlbnNlSW5zdHJ1Y3Rpb25zPmh0dHBzOi8vcHVyY2hhc2UuYXNwb3NlLmNvbS9wb2xpY2llcy91c2UtbGljZW5zZTwvTGljZW5zZUluc3RydWN0aW9ucz4KICA8L0RhdGE+CiAgPFNpZ25hdHVyZT53UGJtNUt3ZTYvRFZXWFNIY1o4d2FiVEFQQXlSR0pEOGI3L00zVkV4YWZpQnd5U2h3YWtrNGI5N2c2eGtnTjhtbUFGY3J0c0cwd1ZDcnp6MytVYk9iQjRYUndTZWxsTFdXeXNDL0haTDNpN01SMC9jZUFxaVZFOU0rWndOQkR4RnlRbE9uYTFQajhQMzhzR1grQ3ZsemJLZFZPZXk1S3A2dDN5c0dqYWtaL1E9PC9TaWduYXR1cmU+CjwvTGljZW5zZT4=")
                    )
                );
        }
    }
}

PPT => PDF/IMG

using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.IO;
using Aspose.Slides;


namespace document_converter.Utils
{
    public class ConverterPpt
    {
        /// <summary>
        /// 转换为PDF
        /// </summary>
        /// <param name="sourcePath">原路径</param>
        /// <param name="targetPath">目标路径</param>
        public static void ToPdf(
            string sourcePath,
            string targetPath
        )
        {
            SetLicense();
            using (var presentation = new Presentation(sourcePath))
            {
                // 保存为PDF文件
                presentation.Save(targetPath, Aspose.Slides.Export.SaveFormat.Pdf);
            }
        }


        /// <summary>
        /// 转换为图片
        /// </summary>
        /// <param name="sourcePath">原路径</param>
        /// <param name="targetPath">目标文件夹</param>
        /// <param name="startPageNum">开始页面</param>
        /// <param name="endPageNum">结束页面</param>
        /// <param name="imageFormat">格式</param>
        /// <param name="resolution">清晰度</param>
        /// <returns></returns>
        public static List<string> ToImage(
            string sourcePath,
            string targetPath,
            int startPageNum = 1,
            int endPageNum = int.MaxValue,
            ImageFormat imageFormat = null,
            int resolution = 128
        )
        {
            SetLicense();
            string pdfPath = Path.ChangeExtension(sourcePath, "temp");
            ToPdf(sourcePath, pdfPath);
            var imgList = ConverterPdf.ToImage(pdfPath, targetPath, startPageNum, endPageNum, imageFormat, resolution);
            if (File.Exists(pdfPath))
            {
                File.Delete(pdfPath);
            }

            return imgList;
        }

        private static void SetLicense()
        {
            new License()
                .SetLicense(
                    new MemoryStream(
                        Convert.FromBase64String(
                            "PExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5TdXpob3UgQXVuYm94IFNvZnR3YXJlIENvLiwgTHRkLjwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPnNhbGVzQGF1bnRlYy5jb208L0VtYWlsVG8+CiAgICA8TGljZW5zZVR5cGU+RGV2ZWxvcGVyIE9FTTwvTGljZW5zZVR5cGU+CiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1pdGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+CiAgICA8T3JkZXJJRD4xOTA4MjYwODA3NTM8L09yZGVySUQ+CiAgICA8VXNlcklEPjEzNDk3NjAwNjwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIGZvciAuTkVUPC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+M2U0NGRlMzAtZmNkMi00MTA2LWIzNWQtNDZjNmEzNzE1ZmMyPC9TZXJpYWxOdW1iZXI+CiAgICA8U3Vic2NyaXB0aW9uRXhwaXJ5PjIwMjAwODI3PC9TdWJzY3JpcHRpb25FeHBpcnk+CiAgICA8TGljZW5zZVZlcnNpb24+My4wPC9MaWNlbnNlVmVyc2lvbj4KICAgIDxMaWNlbnNlSW5zdHJ1Y3Rpb25zPmh0dHBzOi8vcHVyY2hhc2UuYXNwb3NlLmNvbS9wb2xpY2llcy91c2UtbGljZW5zZTwvTGljZW5zZUluc3RydWN0aW9ucz4KICA8L0RhdGE+CiAgPFNpZ25hdHVyZT53UGJtNUt3ZTYvRFZXWFNIY1o4d2FiVEFQQXlSR0pEOGI3L00zVkV4YWZpQnd5U2h3YWtrNGI5N2c2eGtnTjhtbUFGY3J0c0cwd1ZDcnp6MytVYk9iQjRYUndTZWxsTFdXeXNDL0haTDNpN01SMC9jZUFxaVZFOU0rWndOQkR4RnlRbE9uYTFQajhQMzhzR1grQ3ZsemJLZFZPZXk1S3A2dDN5c0dqYWtaL1E9PC9TaWduYXR1cmU+CjwvTGljZW5zZT4=")
                    )
                );
        }
    }
}

PDF => IMG

使用Aspose.PDF

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using Aspose.Pdf;
using Aspose.Pdf.Devices;


namespace document_converter.Utils
{
    public class ConverterPdf
    {
        /// <summary>
        /// 转换为图片的方法
        /// 你可以像这样调用该方法: ToImage("D:\\PdfFile.pdf", "D:\\ImageFile", 1, 20, ImageFormat.Png, 256);
        /// </summary>
        /// <param name="sourcePath"></param>
        /// <param name="targetPath">
        /// 图片输出路径,如果为空,默认值为Word所在路径
        /// </param>
        /// <param name="startPageNum">
        /// 从PDF文档的第几页开始转换,如果为0,默认值为1
        /// </param>
        /// <param name="endPageNum">
        /// 从PDF文档的第几页开始停止转换,如果为0,默认值为Word总页数
        /// </param>
        /// <param name="imageFormat">
        /// 设置所需图片格式,如果为null,默认格式为JPEG
        /// </param>
        /// <param name="resolution">
        /// 设置图片的像素,数字越大越清晰,如果为0,默认值为128,建议最大值不要超过1024
        /// </param>
        public static List<string> ToImage(
            string sourcePath,
            string targetPath,
            int startPageNum = 1,
            int endPageNum = int.MaxValue,
            ImageFormat imageFormat = null,
            int resolution = 128
        )
        {
            SetLicense();
            string imageName = Path.GetFileNameWithoutExtension(sourcePath).Replace(" ", "");
            // 返回的图片绝对路径集合
            List<string> images = new List<string>();
            try
            {
                if (!Directory.Exists(targetPath))
                {
                    if (targetPath != null)
                    {
                        Directory.CreateDirectory(targetPath);
                    }
                }

                using (var pdfDocument = new Document(sourcePath))
                {
                    if (startPageNum <= 0)
                    {
                        startPageNum = 1;
                    }

                    if (endPageNum > pdfDocument.Pages.Count || endPageNum <= 0)
                    {
                        endPageNum = pdfDocument.Pages.Count;
                    }

                    if (startPageNum > endPageNum)
                    {
                        startPageNum = endPageNum;
                        endPageNum = startPageNum;
                    }

                    if (imageFormat == null)
                    {
                        imageFormat = ImageFormat.Jpeg;
                    }

                    if (resolution <= 0)
                    {
                        resolution = 128;
                    }

                    for (int i = startPageNum; i <= endPageNum; i++)
                    {
                        using (var imageStream = new MemoryStream())
                        {
                            var jpegDevice = new JpegDevice(new Resolution(resolution), 100);
                            jpegDevice.Process(pdfDocument.Pages[i], imageStream);

                            imageStream.Position = 0;

                            using (var image = new Bitmap(imageStream))
                            {
                                if (targetPath == null) continue;
                                string pathAll = Path.Combine(
                                    targetPath,
                                    imageName + "_" + i + "." + imageFormat.ToString().ToLower()
                                );
                                images.Add(pathAll);
                                image.Save(pathAll, imageFormat);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return images;
        }

        private static void SetLicense()
        {
            new License()
                .SetLicense(
                    new MemoryStream(
                        Convert.FromBase64String(
                            "PExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5TdXpob3UgQXVuYm94IFNvZnR3YXJlIENvLiwgTHRkLjwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPnNhbGVzQGF1bnRlYy5jb208L0VtYWlsVG8+CiAgICA8TGljZW5zZVR5cGU+RGV2ZWxvcGVyIE9FTTwvTGljZW5zZVR5cGU+CiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1pdGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+CiAgICA8T3JkZXJJRD4xOTA4MjYwODA3NTM8L09yZGVySUQ+CiAgICA8VXNlcklEPjEzNDk3NjAwNjwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIGZvciAuTkVUPC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+M2U0NGRlMzAtZmNkMi00MTA2LWIzNWQtNDZjNmEzNzE1ZmMyPC9TZXJpYWxOdW1iZXI+CiAgICA8U3Vic2NyaXB0aW9uRXhwaXJ5PjIwMjAwODI3PC9TdWJzY3JpcHRpb25FeHBpcnk+CiAgICA8TGljZW5zZVZlcnNpb24+My4wPC9MaWNlbnNlVmVyc2lvbj4KICAgIDxMaWNlbnNlSW5zdHJ1Y3Rpb25zPmh0dHBzOi8vcHVyY2hhc2UuYXNwb3NlLmNvbS9wb2xpY2llcy91c2UtbGljZW5zZTwvTGljZW5zZUluc3RydWN0aW9ucz4KICA8L0RhdGE+CiAgPFNpZ25hdHVyZT53UGJtNUt3ZTYvRFZXWFNIY1o4d2FiVEFQQXlSR0pEOGI3L00zVkV4YWZpQnd5U2h3YWtrNGI5N2c2eGtnTjhtbUFGY3J0c0cwd1ZDcnp6MytVYk9iQjRYUndTZWxsTFdXeXNDL0haTDNpN01SMC9jZUFxaVZFOU0rWndOQkR4RnlRbE9uYTFQajhQMzhzR1grQ3ZsemJLZFZPZXk1S3A2dDN5c0dqYWtaL1E9PC9TaWduYXR1cmU+CjwvTGljZW5zZT4=")
                    )
                );
        }
    }
}

使用O2S.Components.PDFRender4NET

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using O2S.Components.PDFRender4NET;

namespace document_converter.Utils
{
    public class ConverterPdf
    {
        public enum Definition
        {
            Low = 2,
            Standard = 3,
            High = 5,
            SuperHigh = 8,
            UltraHigh = 10
        }

        /// <summary>
        /// 获取PDF的页数
        /// </summary>
        /// <param name="pdfInputPath"></param>
        /// <returns></returns>
        public static int GetPageNum(string pdfInputPath)
        {
            PDFFile pdfFile = PDFFile.Open(pdfInputPath);
            return pdfFile.PageCount;
        }

        /// <summary>
        /// 将PDF文档转换为图片的方法
        /// </summary>
        /// <param name="pdfInputPath">PDF文件路径</param>
        /// <param name="imageOutputPath">图片输出路径</param>
        /// <param name="startPageNum">从PDF文档的第几页开始转换</param>
        /// <param name="endPageNum">从PDF文档的第几页开始停止转换</param>
        /// <param name="imageFormat">设置所需图片格式</param>
        /// <param name="definition">设置图片的清晰度,数字越大越清晰</param>
        public static List<string> ToImage(
            string pdfInputPath,
            string imageOutputPath,
            int startPageNum = 1,
            int endPageNum = int.MaxValue,
            ImageFormat imageFormat = null,
            Definition definition = Definition.Standard
        )
        {
            Console.WriteLine($@"Converting: [{pdfInputPath}] -> [{imageOutputPath}]");
            List<string> imgList = new List<string>();
            string imageName = "pdfimg";
            if (imageFormat == null)
            {
                imageFormat = ImageFormat.Jpeg;
            }

            PDFFile pdfFile = PDFFile.Open(pdfInputPath);
            if (!Directory.Exists(imageOutputPath))
            {
                Directory.CreateDirectory(imageOutputPath);
            }

            if (startPageNum <= 0)
            {
                startPageNum = 1;
            }

            if (endPageNum > pdfFile.PageCount)
            {
                endPageNum = pdfFile.PageCount;
            }

            if (startPageNum > endPageNum)
            {
                startPageNum = endPageNum;
                endPageNum = startPageNum;
            }

            for (int i = startPageNum; i <= endPageNum; i++)
            {
                Bitmap pageImage = pdfFile.GetPageImage(i - 1, 56 * (int)definition);

                string filePath = imageOutputPath + imageName + i + "." + imageFormat.ToString().ToLower();
                imgList.Add(filePath);
                pageImage.Save(filePath, imageFormat);
                pageImage.Dispose();
            }

            pdfFile.Dispose();
            return imgList;
        }
    }
}

调用

完整代码

https://gitee.com/psvmc/document-converter.git

返回码

  • 0 转换成功
  • 1 转换失败
  • 2 格式不支持
  • 3 文件不存在

转为PDF

Word => PDF

document-converter.exe pdf "D:\\Tools\\Docs\\01.docx" "D:\\Tools\\Docs\\pdf\\01.pdf"
document-converter.exe pdf "D:\\Tools\\Docs\\01.doc" "D:\\Tools\\Docs\\pdf\\01.pdf"

PPT => PDF

document-converter.exe pdf "D:\\Tools\\Docs\\02.pptx" "D:\\Tools\\Docs\\pdf\\02.pdf"

缺少字体文档测试

document-converter.exe pdf "D:\\Tools\\Docs\\more\\第一节 导数的概念及运算 定积分.ppt" "D:\\Tools\\Docs\\pdf\\第一节 导数的概念及运算 定积分.pdf"

Excel => PDF

document-converter.exe pdf "D:\\Tools\\Docs\\03.xlsx" "D:\\Tools\\Docs\\pdf\\03.pdf"

TXT => PDF

document-converter.exe pdf "D:\\Tools\\Docs\\04.txt" "D:\\Tools\\Docs\\pdf\\04.pdf"

XML => PDF

document-converter.exe pdf "D:\\Tools\\Docs\\05.xml" "D:\\Tools\\Docs\\pdf\\05.pdf"

HTML => PDF

document-converter.exe pdf "D:\\Tools\\Docs\\06.html" "D:\\Tools\\Docs\\pdf\\06.pdf"

转为图片

PDF => IMG

document-converter.exe img "D:\\Tools\\Docs\\pdf\\01.pdf" "D:\\Tools\\Docs\\images\\pdf\\"

Word => IMG

document-converter.exe img "D:\\Tools\\Docs\\01.docx" "D:\\Tools\\Docs\\images\\word\\"

PPT => IMG

document-converter.exe img "D:\\Tools\\Docs\\02.pptx" "D:\\Tools\\Docs\\images\\ppt\\"

Excel => IMG

document-converter.exe img "D:\\Tools\\Docs\\03.xlsx" "D:\\Tools\\Docs\\images\\excel\\"

TXT => IMG

document-converter.exe img "D:\\Tools\\Docs\\04.txt" "D:\\Tools\\Docs\\images\\txt\\"

XML => IMG

document-converter.exe img "D:\\Tools\\Docs\\05.xml" "D:\\Tools\\Docs\\images\\xml\\"

HTML => IMG

document-converter.exe img "D:\\Tools\\Docs\\06.html" "D:\\Tools\\Docs\\images\\html\\"

Aspose.PDF和O2S.Components.PDFRender4NET

Aspose.PDF是一个用于处理PDF文件的强大工具,它提供了一系列的功能,包括:

  1. 创建和编辑PDF文件:可以使用Aspose.PDF创建新的PDF文档、编辑和修改现有的PDF文档。
  2. 将PDF文件转换为其他格式:将PDF文件转换为多种文件格式,包括DOC、DOCX、HTML、XML、PPT和XPS等。
  3. 添加水印和加密:可以在PDF文档中添加水印、数字签名和加密等安全特性。
  4. 表单处理:用于创建、填写和提交PDF表单。
  5. 文本和图像处理:可以从PDF文档中提取文本和图像,还可以在文档中插入、更新和删除文本和图像等。
  6. 页面元素处理:可以在PDF页面上添加、更新、删除和移动页面元素,如链接、书签、注释、标签和旋转等。

总之,Aspose.PDF提供了广泛的功能,能够满足用户处理PDF文件的各种需求。

Aspose.PDF功能比较多所以文件比较大,有32.9M。 O2S.Components.PDFRender4NET在转图片上效果也不错,大小只有944K,还不到1M,推荐使用。

在网上看的

O2S.Components.PDFRender4NET依赖Ghostscript软件来渲染PDF文件。

但是实际测试的时候并不用安装Ghostscript,也能转换成功。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装依赖
  • Word => PDF/IMG
  • Excel => PDF/IMG
  • PPT => PDF/IMG
  • PDF => IMG
    • 使用Aspose.PDF
      • 使用O2S.Components.PDFRender4NET
      • 调用
        • 转为PDF
          • 转为图片
          • Aspose.PDF和O2S.Components.PDFRender4NET
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档