Dq
B

分类导航

O2S.Components.PDFRender4NET.dll v4.0.2.0最新无水印版

大小:1.21MB更新:2018-04-09
类别:exe,dll文件系统: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库可以提供给每个开发者,而且它的发行是免费的,这样就降低了开发者的工程开销。

O2S.Components.PDFRender4NET.dll

功能特色

当创建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文件的内容,以减小文件的大小和下载时间

使用O2S.Components.PDFRender4NET将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;

}

}

}

O2S.Components.PDFRender4NET.dll 图片空白BUG问题

在用网上的破解版的时候,会出现莫名的错误,大多数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 }

相关推荐