PDF另存为图片的一个方法

说明

有时需要把PDF的每一页另存为图片。用Devexpress可以很方便的完成这个功能。

窗体上放置一个PdfViewer。

然后循环每一页 for (int i = 1; i <= pdfViewer1.PageCount; i++)

调用 chg_pdf_to_bmp函数获得图片并保存

chg_pdf_to_bmp中调用了PdfViewer的CreateBitmap函数

全部代码

private string pdf_fn = "";

private void button1_Click(object sender, EventArgs e)

{

pdf_fn = textBox1.Text.Trim();

if (! System.IO.File.Exists(pdf_fn))

return;

button1.Enabled = false;

string dir = System.IO.Path.GetDirectoryName(pdf_fn) + @"\" + System.IO.Path.GetFileNameWithoutExtension(pdf_fn) + ".files";

if (!System.IO.Directory.Exists(dir))

System.IO.Directory.CreateDirectory(dir);

pdfViewer1.LoadDocument(pdf_fn);

progressBar1.Value = 0;

progressBar1.Maximum = pdfViewer1.PageCount;

Application.DoEvents();

for (int i = 1; i <= pdfViewer1.PageCount; i++)

{

Bitmap bmp = chg_pdf_to_bmp(pdfViewer1,i);

bmp.Save(dir+@"\"+i.ToString()+".jpg", ImageFormat.Jpeg );

bmp.Dispose();

progressBar1.Value = progressBar1.Value +1;

Application.DoEvents();

}

MessageBox.Show("保存在"+ dir+"下");

button1.Enabled = true;

}

cs 复制代码
        private string pdf_fn = "";
        private void button1_Click(object sender, EventArgs e)
        {
            pdf_fn = textBox1.Text.Trim();
            if (! System.IO.File.Exists(pdf_fn))
                return;
            button1.Enabled = false;
            string dir = System.IO.Path.GetDirectoryName(pdf_fn) + @"\" + System.IO.Path.GetFileNameWithoutExtension(pdf_fn) + ".files";
            if (!System.IO.Directory.Exists(dir))
                System.IO.Directory.CreateDirectory(dir);
            pdfViewer1.LoadDocument(pdf_fn);
            progressBar1.Value = 0;
            progressBar1.Maximum = pdfViewer1.PageCount;
            Application.DoEvents();
            for (int i = 1; i <= pdfViewer1.PageCount; i++)
            {
                Bitmap bmp = chg_pdf_to_bmp(pdfViewer1,i);

                bmp.Save(dir+@"\"+i.ToString()+".jpg", ImageFormat.Jpeg ); 

                bmp.Dispose();
                progressBar1.Value = progressBar1.Value +1;
                Application.DoEvents();
            }
            MessageBox.Show("保存在"+ dir+"下");
            button1.Enabled = true;

        }

public Bitmap chg_pdf_to_bmp(DevExpress.XtraPdfViewer.PdfViewer VW_PDF, int i_page_no, int max_w = 210 * 4 * 3)

{

DevExpress.Pdf.PdfDocument _pdf_document = null;

VW_PDF.CurrentPageNumber = i_page_no;

VW_PDF.Refresh();

System.Reflection.PropertyInfo fiDocument = VW_PDF.GetType().GetProperty("Document", BindingFlags.Instance | BindingFlags.NonPublic);

_pdf_document = fiDocument.GetValue(VW_PDF, null) as DevExpress.Pdf.PdfDocument;

PdfPage pdfpage = _pdf_document.Pagesi_page_no - 1;

SizeF page_sf = VW_PDF.GetPageSize(i_page_no);

int pw = (int)(page_sf.Width / pdfpage.UserUnit * 500);

int ph = (int)(page_sf.Height / pdfpage.UserUnit * 500);

int bmp_w = pw; //pw * 3 / 2;

int bmp_h = ph; //ph * 3 / 2;

if (bmp_w > max_w)

bmp_w = max_w;

Bitmap bmp = VW_PDF.CreateBitmap(i_page_no, bmp_w);

return bmp;

}

cs 复制代码
        public Bitmap chg_pdf_to_bmp(DevExpress.XtraPdfViewer.PdfViewer VW_PDF, int i_page_no, int max_w = 210 * 4 * 3)
        {
            DevExpress.Pdf.PdfDocument _pdf_document = null;
            VW_PDF.CurrentPageNumber = i_page_no;
            VW_PDF.Refresh();
            System.Reflection.PropertyInfo fiDocument = VW_PDF.GetType().GetProperty("Document", BindingFlags.Instance | BindingFlags.NonPublic);
            _pdf_document = fiDocument.GetValue(VW_PDF, null) as DevExpress.Pdf.PdfDocument;

            PdfPage pdfpage = _pdf_document.Pages[i_page_no - 1];
            SizeF page_sf = VW_PDF.GetPageSize(i_page_no);
            int pw = (int)(page_sf.Width / pdfpage.UserUnit * 500);
            int ph = (int)(page_sf.Height / pdfpage.UserUnit * 500);
            int bmp_w = pw;                                            //pw * 3 / 2;
            int bmp_h = ph;                                            //ph * 3 / 2; 
            if (bmp_w > max_w)
                bmp_w = max_w;
            Bitmap bmp = VW_PDF.CreateBitmap(i_page_no, bmp_w);
            return bmp;
        }
相关推荐
Csvn1 小时前
原型链、this 与闭包内存:三座深水区一次打通(含内存泄漏排查实战)
前端·javascript
葡萄城技术团队1 小时前
如何通过 JSON 数据源 / Web API 快速构建轻量级报表(Report)?
前端·json·原型模式
浪兎兎1 小时前
【Java Web】Servlet + JSP 笔记
java·前端·servlet
Behaviour2 小时前
Unity UI循环列表UIScrollViewContent实现
ui·unity·c#·游戏引擎
c#上位机2 小时前
C#上位机项目实战——C#的dll项目编译时拷贝到指定目录下
开发语言·c#
Patrick_Wilson2 小时前
iOS Safari Clipboard API 权限弹窗问题
前端·ios·safari
曹牧3 小时前
C#:数组与列表的差异
开发语言·c#
OpenTiny社区3 小时前
Naive UI × GenUI SDK:自定义物料库搭建实战
前端·ai编程
何以解忧唯有撸码3 小时前
Winform上位机也能写出媲美Avalonia的界面
c#·源码·自定义控件
kyriewen3 小时前
我拿 4 个真实前端任务试了 GLM-5.3 Flash:代码一遍跑通,账单 4 分钱
前端·程序员·ai编程