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;
        }
相关推荐
子兮曰2 分钟前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
sm_926787053 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
IMPYLH3 小时前
HTML 的 <video> 元素
前端·html
鲲穹AI种草3 小时前
PDF 编辑工具怎么选,多款工具实际使用情况整理
pdf·pdf 编辑工具
kimloner3 小时前
开源一个 376KB 的 Windows 桌面小工具:便签 + 截图标注 + OCR + 待办提醒(C# / WinForms)
windows·开源·c#·ocr·winforms
溪语流沙4 小时前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
逐光者9334 小时前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
To_OC4 小时前
同样是让 AI 写全栈,为什么别人一句话就够了
前端·前端框架·next.js
阿松爱学习4 小时前
【Unity开发】Aspose.PDF的使用
unity·pdf·c#
CDwenhuohuo4 小时前
electron pc项目打包成桌面端
前端·javascript·electron