• .Net的PDF转图片


    用的是破解版的 O2S.Components.PDFRender4NET.dll 插件, 简单引用即可

        public static class PdfToImage
        {
            public static MemoryStream GetPdfImagePageStream(string pdfInputPath, int pageIndex, ImageFormat format, int width = 1600, int height = 2560, int quality = 10)
            {
                try
                {
                    //pdf处理插件
                    PDFFile pdfFile = PDFFile.Open(pdfInputPath);
                    int total = pdfFile.PageCount;
    
                    #region 防止异常参数
                    if (pageIndex < 0)
                    {
                        pageIndex = 0;
                    }
                    if (pageIndex > total)
                    {
                        pageIndex = total - 1;
                    }
                    if (quality < 1)
                    {
                        quality = 1;
                    }
                    if (quality > 10)
                    {
                        quality = 10;
                    }
                    if (width <= 0)
                    {
                        width = 1;
                    }
    
                    if (height <= 0)
                    {
                        height = 1;
                    }
                    #endregion
    
                    //pdf转换图片
                    SizeF pageSize = pdfFile.GetPageSize(pageIndex);
    
                    Bitmap pageImage = pdfFile.GetPageImage(pageIndex, 56 * quality);
    
                    MemoryStream ms = new MemoryStream();
    
                    pageImage.Save(ms, format);
    
                    //原图
                    Image img = Image.FromStream(ms, true);
    
                    double ratio = (double)width / (double)height;
    
                    double oRatio = (double)img.Width / (double)img.Height;
    
                    int sbWidth = 0;
    
                    int sbHeight = 0;
    
                    int outX = 0;
                    int outY = 0;
    
                    if (oRatio < ratio)
                    {
                        sbWidth = (int)(img.Width * ((double)height / (double)(img.Height)));
                        sbHeight = height;
    
                        outX = (width - sbWidth) / 2;
                    }
                    else
                    {
                        sbHeight = (int)(img.Height * ((double)width / (double)(img.Width)));
                        sbWidth = width;
    
                        outY = (height - sbHeight) / 2;
                    }
    
                    //缩放
                    Image sbImg = new Bitmap(sbWidth, sbHeight);
                    Graphics sbGra = Graphics.FromImage(sbImg);
                    sbGra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    sbGra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    sbGra.Clear(Color.White);
                    sbGra.DrawImage(img, new System.Drawing.Rectangle(0, 0, sbWidth, sbHeight), new System.Drawing.Rectangle(0, 0, img.Width, img.Height), System.Drawing.GraphicsUnit.Pixel);
    
                    //补白
                    Image outImg = new System.Drawing.Bitmap(width, height);
                    Graphics outGra = System.Drawing.Graphics.FromImage(outImg);
                    outGra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    outGra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    outGra.Clear(Color.White);
                    outGra.DrawImage(sbImg, new System.Drawing.Rectangle(outX, outY, sbWidth, sbHeight), new System.Drawing.Rectangle(0, 0, sbWidth, sbHeight), System.Drawing.GraphicsUnit.Pixel);
    
                    MemoryStream outMs = new MemoryStream();
    
                    outImg.Save(outMs, format);
    
                    sbImg.Dispose();
                    outImg.Dispose();
                    img.Dispose();
    
                    return outMs;
    
                }
                catch (Exception ex)
                {
    
                }
    
                return new MemoryStream();
            }
    
            public static MemoryStream GetPdfImagePageStream(Stream stream, int pageIndex, ImageFormat format, int width = 1600, int height = 2560, int quality = 10)
            {
                try
                {
                    //pdf处理插件
                    PDFFile pdfFile = PDFFile.Open(stream);
                    int total = pdfFile.PageCount;
    
                    #region 防止异常参数
                    if (pageIndex < 0)
                    {
                        pageIndex = 0;
                    }
                    if (pageIndex > total)
                    {
                        pageIndex = total - 1;
                    }
                    if (quality < 1)
                    {
                        quality = 1;
                    }
                    if (quality > 10)
                    {
                        quality = 10;
                    }
                    if (width <= 0)
                    {
                        width = 1;
                    }
    
                    if (height <= 0)
                    {
                        height = 1;
                    }
                    #endregion
    
                    //pdf转换图片
                    SizeF pageSize = pdfFile.GetPageSize(pageIndex);
    
                    Bitmap pageImage = pdfFile.GetPageImage(pageIndex, 56 * quality);
    
                    MemoryStream ms = new MemoryStream();
    
                    pageImage.Save(ms, format);
    
                    //原图
                    Image img = Image.FromStream(ms, true);
    
                    double ratio = (double)width / (double)height;
    
                    double oRatio = (double)img.Width / (double)img.Height;
    
                    int sbWidth = 0;
    
                    int sbHeight = 0;
    
                    int outX = 0;
                    int outY = 0;
    
                    if (oRatio < ratio)
                    {
                        sbWidth = (int)(img.Width * ((double)height / (double)(img.Height)));
                        sbHeight = height;
    
                        outX = (width - sbWidth) / 2;
                    }
                    else
                    {
                        sbHeight = (int)(img.Height * ((double)width / (double)(img.Width)));
                        sbWidth = width;
    
                        outY = (height - sbHeight) / 2;
                    }
    
                    //缩放
                    Image sbImg = new Bitmap(sbWidth, sbHeight);
                    Graphics sbGra = Graphics.FromImage(sbImg);
                    sbGra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    sbGra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    sbGra.Clear(Color.White);
                    sbGra.DrawImage(img, new System.Drawing.Rectangle(0, 0, sbWidth, sbHeight), new System.Drawing.Rectangle(0, 0, img.Width, img.Height), System.Drawing.GraphicsUnit.Pixel);
    
                    //补白
                    Image outImg = new System.Drawing.Bitmap(width, height);
                    Graphics outGra = System.Drawing.Graphics.FromImage(outImg);
                    outGra.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    outGra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    outGra.Clear(Color.White);
                    outGra.DrawImage(sbImg, new System.Drawing.Rectangle(outX, outY, sbWidth, sbHeight), new System.Drawing.Rectangle(0, 0, sbWidth, sbHeight), System.Drawing.GraphicsUnit.Pixel);
    
                    MemoryStream outMs = new MemoryStream();
    
                    outImg.Save(outMs, format);
    
                    sbImg.Dispose();
                    outImg.Dispose();
                    img.Dispose();
    
                    return outMs;
    
                }
                catch (Exception ex)
                {
    
                }
    
                return new MemoryStream();
            }
        }
    View Code

     DLL下载: O2S.Components.PDFRender4NET.dll

  • 相关阅读:
    分布式文件系统--FastDFS以及Nginx
    正则
    交互式多媒体图书平台的设计与实现
    安装opencv
    基于VsCode的java语言编程调试环境
    码农的自我修养之必备技能 学习笔记
    工程化编程实战callback接口学习笔记
    'java.lang.String' to required type 'javax.sql.DataSource' for property 'dataSource'
    如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?
    深入理解TCP协议及其源代码
  • 原文地址:https://www.cnblogs.com/xachary/p/4200761.html
Copyright © 2020-2023  润新知