.Net的PDF转图片

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();
        }
    }


知识共享许可协议
《.Net的PDF转图片》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
相邻依据:发表时间
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     170.50ms