c# PDF 转换成图片

1.新建项目

2.新增一个新文件夹“lib”(主要是为了存放引用的dll)


3.将“gsdll32.dll  、PDFLibNet.dll  、PDFView.dll”3个dll添加到文件夹中

4.项目添加“PDFLibNet.dll  、PDFView.dll”2个类库的引用,并将gsdll32.dll 拷贝到项目生产根目录中(bin 目录)

(注意:gsdll32.dll 是无法和其它两个dll 一样添加到项目中进行引用的,这一点我之前未能给大家作出说明,不好意思,^_^ )


 

5.在主界面中添加文本框“TextBox1”,浏览按钮“button1”,转换按钮“button2”和文件选择控件“OpenFileDialog1”

 

6.执行方式:点击浏览按钮选择一个PDF,点击“转换按钮”即可

7.源代码:Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace PDFEditer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 将PDF 相应的页转换为图片
        /// </summary>
        /// <param name="strPDFpath">PDF 路径</param>
        /// <param name="Page">需要转换的页页码</param>
        private void GetImage(string strPDFpath,int Page)
        {
            FileInfo file=new FileInfo (strPDFpath);
            string strSavePath=file.Directory.FullName;
            byte[] ImgData = GetImgData(strPDFpath, Page);

            MemoryStream ms = new MemoryStream(ImgData, 0, ImgData.Length);
            Bitmap returnImage = (Bitmap)Bitmap.FromStream(ms);

            string strImgPath=Path.Combine(strSavePath,string.Format("PDFConvert{0}.jpg",Page));
            returnImage.Save(strImgPath);
        }

        /// <summary>
        /// 从PDF中获取首页的图片
        /// </summary>
        /// <param name="PDFPath">PDF 文件路径</param>
        /// <param name="Page">需要获取的第几页</param>
        /// <returns></returns>
        private byte[] GetImgData(string PDFPath,int Page)
        {
            System.Drawing.Image img = PDFView.ConvertPDF.PDFConvert.GetPageFromPDF(PDFPath,Page, 300, "", true);
            return GetDataByImg(img);//读取img的数据并返回
        }

        /// <summary>
        /// 将单页的PDF转换为图片
        /// </summary>
        /// <param name="_image"></param>
        /// <returns></returns>
        private byte[] GetDataByImg(System.Drawing.Image _image)
        {
            System.IO.MemoryStream Ms = new MemoryStream();
            _image.Save(Ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            byte[] imgdata = new byte[Ms.Length];
            Ms.Position = 0;
            Ms.Read(imgdata, 0, Convert.ToInt32(Ms.Length));
            Ms.Close();
            return imgdata;
        }


        string Pdfpath = "";
        /// <summary>
        /// 选择需要转换的PDF
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Pdfpath = openFileDialog1.FileName;
            }
            else
            {
                Pdfpath = "";
            }
            textBox1.Text = Pdfpath;
        }

        /// <summary>
        /// 转换
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(Pdfpath))
            {
                GetImage(Pdfpath,2);
            }
        }
    }
}

 

源码下载:http://u.163.com/8MJPw5bT   提取码:pe8y8a35

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java finally在return_Java finally语句到底是在return之前还是之后执行?

点击上方“方志朋”&#xff0c;选择“置顶或者星标”你的关注意义重大&#xff01;网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行&#xff1f;很多人都说不是&#xff0c;当然他们的回答是正确的&#xff0c;经过我试验&#…

oracle 死锁

为什么80%的码农都做不了架构师&#xff1f;>>> ORA-01013: user requested cancel of current operation 转载于:https://my.oschina.net/8808/blog/2994537

面试题:二叉树的深度

题目描述&#xff1a;输入一棵二叉树&#xff0c;求该树的深度。从根结点到叶结点依次经过的结点&#xff08;含根、叶结点&#xff09;形成树的一条路径&#xff0c;最长路径的长度为树的深度。 思路&#xff1a;递归 //递归 public class Solution {public int TreeDepth(Tre…

a/b测试_如何进行A / B测试?

a/b测试The idea of A/B testing is to present different content to different variants (user groups), gather their reactions and user behaviour and use the results to build product or marketing strategies in the future.A / B测试的想法是将不同的内容呈现给不同…

hibernate h2变mysql_struts2-hibernate-mysql开发案例 -解道Jdon

Hibernate专题struts2-hibernate-mysql开发案例与源码源码下载本案例展示使用Struts2&#xff0c;Hibernate和MySQL数据库开发一个个人音乐管理器Web应用程序。&#xff0c;可将您的音乐收藏添加到数据库中。功能有&#xff1a;显示一个添加记录的表单和所有的音乐收藏的列表。…

P5024 保卫王国

传送门 我现在还是不明白为什么NOIPd2t3会是一道动态dp…… 首先关于动态dp可以看这里 然后这里就是把把矩阵给改一改&#xff0c;改成这个形式\[\left[dp_{i-1,0},dp_{i-1,1}\right]\times \left[\begin{matrix}\infty&ldp_{i,1}\\ldp_{i,0}&ldp_{i,1}\end{matrix}\ri…

提取图像感兴趣区域_从图像中提取感兴趣区域

提取图像感兴趣区域Welcome to the second post in this series where we talk about extracting regions of interest (ROI) from images using OpenCV and Python.欢迎来到本系列的第二篇文章&#xff0c;我们讨论使用OpenCV和Python从图像中提取感兴趣区域(ROI)。 As a rec…

解决java compiler level does not match the version of the installed java project facet

ava compiler level does not match the version of the installed java project facet错误的解决 因工作的关系&#xff0c;Eclipse开发的Java项目拷来拷去&#xff0c;有时候会报一个很奇怪的错误。明明源码一模一样&#xff0c;为什么项目复制到另一台机器上&#xff0c;就会…

php模板如何使用,ThinkPHP如何使用模板

到目前为止&#xff0c;我们只是使用了控制器和模型&#xff0c;还没有接触视图&#xff0c;下面来给上面的应用添加视图模板。首先我们修改下 Action 的 index 操作方法&#xff0c;添加模板赋值和渲染模板操作。PHP代码classIndexActionextendsAction{publicfunctionindex(){…

理解Windows窗体和WPF中的跨线程调用

你曾开发过Windows窗体程序&#xff0c;可能会注意到有时事件处理程序将抛出InvalidOperationException异常&#xff0c;信息为“ 跨线程调用非法&#xff1a;在非创建控件的线程上访问该控件”。这种Windows窗体应用程序中 跨线程调用时的一个最为奇怪的行为就是&#xff0c;有…

什么是嵌入式系统

在我们的日常生活中&#xff0c;我们经常使用许多使用嵌入式系统技术设计的电气和电子电路和套件。计算机&#xff0c;手机&#xff0c;平板&#xff0c;笔记本电脑&#xff0c;数字电子系统以及其他电子和电子设备都是使用嵌入式系统设计的。 什么是嵌入式系统&#xff1f;将硬…

面向数据科学家的实用统计学_数据科学家必知的统计数据

面向数据科学家的实用统计学Beginners usually ignore most foundational statistical knowledge. To understand different models, and various techniques better, these concepts are essential. These work as baseline knowledge for various concepts involved in data …

字符串、指针、引用、数组基础

1.字符串&#xff1a;字符是由单引号所括住的单个字母、数字或符号。若将单引号改为双引号&#xff0c;该字符就会变成字符串。它们之间主要的差别是&#xff1a;双引号的字符串“A”会比单引号的字符串’A’在字符串的最后补上一个结束符’\0’&#xff08;Null字符&#xff0…

suse安装php,SUSE下安装LAMP

安装Apache可以看到编译安装Apache出错&#xff0c;rpm包安装gcc (首先要安装GCC)makemake install修改apache端口cd /home/sxit/apache2vi conf/httpd.confListen 8000启动 apache/home/root/apache2/bin/apachectl start(stop restart)http://localhost:8000安装一下PHP开发…

自己动手写事件总线(EventBus)

2019独角兽企业重金招聘Python工程师标准>>> 本文由云社区发表 事件总线核心逻辑的实现。 <!--more--> EventBus的作用 Android中存在各种通信场景&#xff0c;如Activity之间的跳转&#xff0c;Activity与Fragment以及其他组件之间的交互&#xff0c;以及在某…

viz::viz3d报错_我可以在Excel中获得该Viz吗?

viz::viz3d报错Have you ever found yourself in the following situation?您是否遇到以下情况&#xff1f; Your team has been preparing and working tireless hours to create and showcase the end product — an interactive visual dashboard. It’s a culmination of…

php 数组合并字符,PHP将字符串或数组合并到一个数组内方法

本文主要和大家分享PHP将字符串或数组合并到一个数组内方法&#xff0c;有两种方法&#xff0c;希望希望能帮助到大家。一般写法&#xff1a;<?php /*** add a string or an array to another array** param array|string $val* param array $array*/function add_val_to_a…

xcode 4 最低的要求是 10.6.6的版本,如果你是 10.6.3的版本,又不想升级的话。可以考虑通过修改版本号的方法进行安装

xcode 4 最低的要求是 10.6.6的版本&#xff0c;如果你是 10.6.3的版本&#xff0c;又不想升级的话。可以考虑通过修改版本号的方法进行安装。 一、打开控制台&#xff1b; 二、使用root用户&#xff1b; 命令&#xff1a;sudo -s 之后输入密码即可 三、编辑 /System/Library/C…

android 调试技巧

1.查看当前堆栈 Call tree new Exception(“print trace”).printStackTrace(); &#xff08;在logcat中打印当前函数调用关系&#xff09; 2.MethodTracing 性能分析与优&#xff08; 函数占用CPU时间&#xff0c; 调用次数&#xff0c; 函数调用关系&#xff09; a) 在程序…

Xml序列化

xml序列化 实现思路 通过程序生成一个xml文件来备份手机短信. 先获取手机短信的内容 —>通过xml备份.StringBuffer 代码如下public void click(View view) {StringBuffer sb new StringBuffer();sb.append("<?xml version\"1.0\" encoding\"UTF-8\…