- 软件大小:1.21MB
- 软件语言:简体中文
- 软件类型:国产软件
- 软件类别:exe,dll文件
- 更新时间:2018-04-09
- 软件授权:免费版
- 官方网站://www.9553.com
- 运行环境:XP/Win7/Win8/Win10
- 标签:
O2S.Components.PDFRender4NET.dll是dll.net组件工具,可以帮助一个pdf文件转化成转图片形式,目前该组件工具也是已经去除了转化过程中的水印,如果你喜欢就快来下载这个实用的组件吧!
它的主要功能可以被分为3个主要部分:PDF的创建,PDF的编辑和PDF格式的填充。此库对标准.NET框架和压缩的.NET框架都提供支持。由于PDF4NET的发布是免费的,因此当用PDF4NET进行开发时,工程的花费将会减少。
PDF4NET是一种.NET库,它能够对运行中的任意.NET应用程序生成和插入pdf文档。这个库不依赖于任何Adobe产品来创建和插入pdf文件。它通过一个简单的对象模块把pdf文件复杂的结构隐藏起来,这个对象模块允许开发者创建复杂的pdf文件或者用几行代码来插入已有的pdf文件。PDF4NET库从属于GDI+模型,因此减少了学习的时间,提高了工作效率。它使用了基于网格的图层方法,在文档页面中这种图层方法允许内容的精确定位。最终确定的pdf文件被压缩以使得该库能够适用于Web应用程序。PDF4NET库能够从WinForms and WebForms (ASP.NET)应用程序中直接使用而不受任何限制。同时,相同的包包括了该库的压缩.NET框架(Compact .NET Framework)版本。这个库是完全用C#来实现的,能被完全操纵。
PDF4NET库可以提供给每个开发者,而且它的发行是免费的,这样就降低了开发者的工程开销。
当创建PDF文件时,PDF4NET提供了以下特性的支持:
支持文档的许多属性,例如:文档信息,带有自定义属性的XMP元数据以及浏览器参数
每个文档的页数不受限制,每页都有它自己的大小和在文档中的定位
可随机读取文档中的任一页
标题模板,脚注模板和页面模板
支持罗马和阿拉伯数字 对页码进行自动编号
当采用基于网格的设计方式在页面中放置内容时,在PDF页中移动类似于在屏幕中移动。同时这个库允许创建用户自定义单元和坐标系统
支持绘图的基本要素(线、多线、弧、饼图、长方形、椭圆、贝塞尔曲线)。所有的基本元素都可被画出或者填充,开发者可全权控制所有的线性系统。同样PDF4NET库也可支持对区域的裁剪
RGB、CMYK、Gray色彩空间
支持图像格式,包括jpeg、gif、bmp、png、emf;图像可以按比例或进行旋转后放置在页面的任何位置;嵌入式的图像是放在高速缓存中的,因此当同一幅图像在PDF文件中被多次使用时,它仅仅只被嵌入一次。图像可以从文件、数据流或者系统中载入。画图。位图。通过缺省值来支持透明图像,同样也支持颜色键和图像屏蔽
CCITT G4 用于B/W图像的压缩。Tiff2PDF应用有益于这个特性。使用带有自动文字包的单文本或文本框能支持各种文本设计,这些单文本或文本框也具有自动文本对齐(左对齐、居中对齐、右对齐、或者水平对齐、或者顶对齐、垂直对齐和底对齐)和自动旋转的特性
当拖动文本的时候,支持HTML格式标识符
支持14种基本字体,Type1 字体, Unicode TrueType字体, System.Drawing. 字体和CJK字体这些字体来自Adobe亚洲语言包(Adobe Asian Language pack)。Type1 字体和TrueType字体能够被嵌入到PDF文档中,对于TrueType字体,这个库能使得字体的子集自动的减小嵌入式字体的大小。字体都在高速缓存中,因此只能有一种字体被嵌入到最终的PDF文件中。
支持PDF超链接和文档书签。超链接的目标可能是同一文档中的一页,也可能是另外PDF文档,或外部非PDF文件,或web中的URL
在文档、页和书签中都支持PDF Actions。只用几行代码就能控制PDF文档的打开,或者控制向开发者的PDF文档中添加JavaScript代码。支持PDF安全规范。可以对文档进行加密和密码保护,包括用户和所有者的密码。库支持40位和128位的密匙。同时,使用访问权限来限制对文档的操作(允许打印,允许文档组合,允许内容的提取等等)
PDF文件可以被存储为文件或者数据流,包括HTTP输出流
当库用于web应用程序时,可以通过压缩PDF文件的内容,以减小文件的大小和下载时间
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using O2S.Components.PDFRender4NET;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace pdf2ipub.tool
{
public static class pdf2image
{
///
/// 转换的图片清晰度,1最不清醒,10最清晰 ///
public enum Definition
{
One = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10
}
///
/// 将PDF文档转换为图片的方法 ///
///PDF文件路径
///图片输出路径
///生成图片的名字
///从PDF文档的第几页开始转换
///从PDF文档的第几页开始停止转换
///设置所需图片格式
///设置图片的清晰度,数字越大越清晰
public static void ConvertPDF2Image(string pdfInputPath, string imageOutputPath,
string imageName, int startPageNum, int endPageNum, ImageFormat imageFormat, Definition definition)
{
PDFFile pdfFile = PDFFile.Open(pdfInputPath);
if (!Directory.Exists(imageOutputPath))
{
Directory.CreateDirectory(imageOutputPath);
}
// validate pageNum
if (startPageNum <= 0)
{
startPageNum = 1;
}
if (endPageNum > pdfFile.PageCount)
{
endPageNum = pdfFile.PageCount;
}
if (startPageNum > endPageNum)
{
int tempPageNum = startPageNum;
startPageNum = endPageNum;
endPageNum = startPageNum;
}
// start to convert each page
for (int i = startPageNum; i <= endPageNum; i++)
{
Bitmap pageImage = pdfFile.GetPageImage(i - 1, 56 * (int)definition);
int canKao = pageImage.Width > pageImage.Height ? pageImage.Height : pageImage.Width;
int newHeight = canKao > 1080 ? pageImage.Height / 2 : pageImage.Height;
int newWidth = canKao > 1080 ? pageImage.Width / 2 : pageImage.Width;
Bitmap newPageImage = new Bitmap(newWidth, newHeight);
Graphics g = Graphics.FromImage(newPageImage);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
//重新画图的时候Y轴减去130,高度也减去130 这样水印就看不到了
g.DrawImage(pageImage, new Rectangle(0, 0, newWidth, newHeight),
new Rectangle(0, 40, pageImage.Width, pageImage.Height - 40), GraphicsUnit.Pixel);
newPageImage.Save(imageOutputPath + imageName + i.ToString() + "." + imageFormat.ToString(), imageFormat);
g.Dispose();
newPageImage.Dispose();
pageImage.Dispose();
}
pdfFile.Dispose();
}
///
/// 将1个PDF文档所有页全部转换为图片 ///
///PDF文件路径
///图片输出路径
///生成图片的名字
///设置所需图片格式
///设置图片的清晰度,数字越大越清晰
public static void ConvertAllPDF2Images(string pdfInputPath, string imageOutputPath, string imageName,
ImageFormat imageFormat, Definition definition)
{
PDFFile pdfFile = PDFFile.Open(pdfInputPath);
if (!Directory.Exists(imageOutputPath))
{
Directory.CreateDirectory(imageOutputPath);
}
int startPageNum = 1;
int endPageNum = pdfFile.PageCount;
// var bitMap = new Bitmap[endPageNum];
for (int i = startPageNum; i <= endPageNum; i++)
{
try
{
Bitmap pageImage = pdfFile.GetPageImage(i - 1, 56 * (int)definition);
int canKao = pageImage.Width > pageImage.Height ? pageImage.Height : pageImage.Width;
int newHeight = canKao > 1080 ? pageImage.Height / 2 : pageImage.Height;
int newWidth = canKao > 1080 ? pageImage.Width / 2 : pageImage.Width;
Bitmap newPageImage = new Bitmap(newWidth, newHeight);
Graphics g = Graphics.FromImage(newPageImage);
g.InterpolationMode =System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
//重新画图的时候Y轴减去40,高度也减去40 这样水印就看不到了
g.DrawImage(pageImage, new Rectangle(0, 0, newWidth ,newHeight),
new Rectangle(0,40, pageImage.Width, pageImage.Height-40), GraphicsUnit.Pixel);
newPageImage.Save(imageOutputPath + imageName + i.ToString() + "." + imageFormat.ToString(), imageFormat);
g.Dispose();
newPageImage.Dispose();
pageImage.Dispose();
}
catch (Exception ex)
{
}
}
//合并图片
// var mergerImg = MergerImg(bitMap);
//保存图片
// mergerImg.Save(imageOutputPath, imageFormat);
pdfFile.Dispose();
}
///
/// 合并图片 ///
///
///
private static Bitmap MergerImg(params Bitmap[] maps)
{
int i = maps.Length;
if (i == 0)
throw new Exception("图片数不能够为0");
else if (i == 1)
return maps[0];
//创建要显示的图片对象,根据参数的个数设置宽度
Bitmap backgroudImg = new Bitmap(maps[0].Width, i * maps[0].Height);
Graphics g = Graphics.FromImage(backgroudImg);
//清除画布,背景设置为白色
g.Clear(System.Drawing.Color.White);
for (int j = 0; j < i; j++)
{
g.DrawImage(maps[j], 0, j * maps[j].Height, maps[j].Width, maps[j].Height);
}
g.Dispose();
return backgroudImg;
}
}
}
在用网上的破解版的时候,会出现莫名的错误,大多数pdf转成图片都是Ok的,但是有部分转出来是空白,因为我这里要涉及大量的pdf转图片,不允许出现错误。
后来经过实验发现是这个版本存在bug。所以只有升级到更高的版本。这个版本会有水印存在, 转成il,修改了之后,dll不能使用了,dll签名过,所以没办法。
只有在转出来的图片上进行处理,bitmap处理一下就行了,因为水印是固定的地方,所以用GDI重新画图,去掉水印的那一部分就可以了
1 ///
2 /// 将PDF文档转换为图片的方法 3 ///
4 ///PDF文件路径
5 ///图片输出完整路径(包括文件名)
6 ///从PDF文档的第几页开始转换
7 ///从PDF文档的第几页开始停止转换
8 ///设置所需图片格式
9 ///设置图片的清晰度,数字越大越清晰
10 private static void ConvertPdf2Image(string pdfInputPath, string imageOutputPath,
11 int startPageNum, int endPageNum, ImageFormat imageFormat, int definition)
12 {
13
14 PDFFile pdfFile = PDFFile.Open(pdfInputPath);
15
16 if (startPageNum <= 0)
17 {
18 startPageNum = 1;
19 }
20
21 if (endPageNum > pdfFile.PageCount)
22 {
23 endPageNum = pdfFile.PageCount;
24 }
25
26 if (startPageNum > endPageNum)
27 {
28 int tempPageNum = startPageNum;
29 startPageNum = endPageNum;
30 endPageNum = startPageNum;
31 }
32
33 var bitMap = new Bitmap[endPageNum];
34
35 for (int i = startPageNum; i <= endPageNum; i++)
36 {
37 Bitmap pageImage = pdfFile.GetPageImage(i - 1, 56 * definition);
38 Bitmap newPageImage = new Bitmap(pageImage.Width/4 , pageImage.Height/4);
39
40 Graphics g = Graphics.FromImage(newPageImage);
41 g.InterpolationMode = InterpolationMode.HighQualityBicubic; //重新画图的时候Y轴减去130,高度也减去130 这样水印就看不到了
42 g.DrawImage(pageImage, new Rectangle(0, 0, pageImage.Width/4 , pageImage.Height/4),
43 new Rectangle(0, 130, pageImage.Width, pageImage.Height-130), GraphicsUnit.Pixel);
44
45 bitMap[i - 1] = newPageImage;
46 g.Dispose();
47 }
48
49 //合并图片
50 var mergerImg = MergerImg(bitMap);
51 //保存图片
52 mergerImg.Save(imageOutputPath, imageFormat);
53 pdfFile.Dispose();
54 }
55
56 ///
57 /// 合并图片 58 ///
59 ///
60 ///
61 private static Bitmap MergerImg(params Bitmap[] maps)
62 {
63 int i = maps.Length;
64
65 if (i == 0)
66 throw new Exception("图片数不能够为0");
67 else if (i == 1)
68 return maps[0];
69
70 //创建要显示的图片对象,根据参数的个数设置宽度
71 Bitmap backgroudImg = new Bitmap(maps[0].Width, i * maps[0].Height);
72 Graphics g = Graphics.FromImage(backgroudImg);
73 //清除画布,背景设置为白色
74 g.Clear(System.Drawing.Color.White);
75 for (int j = 0; j < i; j++)
76 {
77 g.DrawImage(maps[j], 0, j * maps[j].Height, maps[j].Width, maps[j].Height);
78 }
79 g.Dispose();
80 return backgroudImg;
81 }