现在手上有个需求是要将pdf转换为一页一页的image.最开始找到的是pdfbox来处理pdf的.在pdfbox.apache.org的官网首页写了一句'convert you pdfs to image files'.所以最开始就使用pdfbox来作为转换库.但是在后面却发现出现了一个问题.由于暂时解决不了,发现了magick这个东西.可以用来处理100多种图片格式,并且提供了各种语言的api.

下载magick.net

ImageMagick http://www.imagemagick.org/

.net上官网提供了两个类库 magick.netimagemagickapp.我选择了magick.net这个库.下载地址

http://magick.codeplex.com/releases/view/137513

下载 Magick.NET-7.0.0.0007-Q16-AnyCPU-net40-client.zip

其中下载的时候最好选择AnyCPU的库,在vs编译的时候不需要考虑平台性的问题.Q8 Q16 q16-HDRI分别表示8位 16位和32位的.可以根据需要选择不同版本的库.

下载安装ghostscript

根据自己的需要在ghostscript.com选择下载32位或64位的库.下载地址如下:

http://ghostscript.com/download/gsdnld.html

如果不安装ghostscript,magick.net在执行Read函数读取pdf时会报如下错误.

iisexpress.exe: FailedToExecuteCommand `"gswin32c.exe" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r300x300" "-sOutputFile=C:/Users/ZHANGW~1/AppData/Local/Temp/magick-10612rmwPHf2ITKBB%d" "-fC:/Users/ZHANGW~1/AppData/Local/Temp/magick-10612_fb2bvFOsIGG" "-fC:/Users/ZHANGW~1/AppData/Local/Temp/magick-10612Pg1c2Td4S-bk"' (ϵͳ�Ҳ���ָ�����ļ��� ) @ error/delegate.c/ExternalDelegateCommand/459

生成image

在工程中引用Magick.net.当然也可以使用nuget来引入.转换代码如下,filepath为pdf的路径.

MagickReadSettings settings = new MagickReadSettings();

settings.Density = new MagickGeometry(72, 72); //设置格式

using (MagickImageCollection images = new MagickImageCollection())
{
images.Read(filepath, settings); int pageCount = images.Count(); for (int i = 0; i < page;i++ )
{
MagickImage image = images[i];
image.Format = MagickFormat.Jpeg; string path = string.Format("{0}/{1}.jpg", dir, i);//相对路径 string filename = "d:/img/" + path; image.Write(filename); } }

这里转换就完成了.

IKVM和pdfbox生成的问题

最开始我是使用pdfbox来生成的.代码如下:

PDDocument doc = PDDocument.load(this._path);

int page= doc.getDocumentCatalog().getAllPages().size();//获取总的页数

for (int i = 0; i < page; i++)
{
PDPage pdfPage = allpages.get(i) as PDPage; java.awt.image.BufferedImage image = pdfPage.convertToImage(); string path = string.Format("{0}/{1}.jpg", dir, i);//相对路径 string filename ="d:\img" + path; ImageIO.write(image, "jpg", new java.io.File(filename)); }

运行的时候在下面这行代码中出错了.

java.awt.image.BufferedImage image = pdfPage.convertToImage();

原因是IKVM.GNU.Classpath对awt和Swing实现不完整.导致了错误.当然如果不需要使用awt和Swing的库.使用.net来调用java库IKVM还是能够解决一些问题的.

其他

PDFsharp http://pdfsharp.net/wiki/PDFsharpFAQ.ashx

itextsharp http://itextsharp.sourceforge.net/

ImageMagick http://www.imagemagick.org/

http://magick.codeplex.com/

http://magick.codeplex.com/releases/view/137513

imageMagick 的另一个.net api实现 http://sourceforge.net/projects/imagemagickapp/

使用magick.net将pdf转换为图片的更多相关文章

  1. C#将PDF转换为图片的方法

    1.需要添加引用  O2S.Components.PDFRender4NET 链接: https://pan.baidu.com/s/1ZPTaLTnFkex6QrsndLjwxg 提取码: jdh2 ...

  2. 在Java代码中使用pdfBox将PDF转换为图片

    生成图片 // 生成图片 PDDocument pd = PDDocument.load(new File(filePath)); PDFRenderer pdfRenderer = new PDFR ...

  3. Convert 实现 pdf 和图片格式互转

    pdf 转换为图片 (注意:pdf 默认转换的是透明背景,如果转为jpg格式必须添加背景色.-background white -flatten) convert -background white ...

  4. 2019c#将PDF转图片

    两种方法: 第一种是用O2S.Components.PDFRender4NET 大家可以去网上查找无水印版本 但是有的时候带颜色的字就变空白了 不知道为什么 第二种是用PdfiumViewer 这种方 ...

  5. wkhtmltopdf 将网页转换为PDF和图片

    wkhtmltopdf 是一个shell工具,它使用了WebKit渲染引擎和Qt,将网页html转换为pdf的强大工具,转换后的pdf也可以通过pdf工具进行复制.备注.修改 官网下载地址:http: ...

  6. 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】

    iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...

  7. PDF文档转换为图片、图片转成PDF 及PDF合并

    简介 功能:PDF文档按每页转换成一张图片,一张图片转换成一张PDF 并将多张PDF合成一个多页的PDF文档. 经历:在各个网站上搜索始终出现各种问题,尤其是遇到引用的版本问题尤其头疼,不是不能适用当 ...

  8. C# 将 HTML 转换为图片或 PDF

    首先是把 HTML 转换为图片. public partial class Form1 : Form { public Form1() { InitializeComponent(); } WebBr ...

  9. C# 第三方DLL,可以实现PDF转图片,支持32位系统、64位系统

    itextsharp.dll,是一个开源的在C#中用来生成PDF文档的库文件,不少C#爱好者用它制作出了PDF文档生成器.使用时只需在你的C#项目中添加引入此组件即可,使用方法网上有很多,自己查阅一下 ...

随机推荐

  1. vscode调试HTML

    使用 live-server npm i -g live-server 注:最好还是把live-server安装成全局,这样在使用时整个项目就是一个站点. Ctrl+` 进入命令行终端 打开帮助提示: ...

  2. Android 5.x特性概览五

    上节,介绍Material Design 对阴影效果的实现,这节,我们来介绍Android 5.x的着色与裁剪的特性. Android 5.X 在对图像的操作上增加更多的功能,下面来看看 Androi ...

  3. TCP与UDP协议

    传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP)是典型的传输层协议. 传输层协议基于网络层 ...

  4. 安装时出现 Runtiem error (at 62:321) SWbem Locator:服务不存在,或已被标记为删除 该怎么解决?

    这是由wmi服务损坏引起的错误 修复WMI服务损坏的批处理程序 将下列代码复制到一个文本文件中,改名为fixwmi.bat,运行即可.需要一段时间,请大家耐心等候. ================= ...

  5. [安卓] 5、SeekBar拖动条

    越来越发现这些控件用法大同小异了,这里注意几个函数:seekBar.setSecondaryProgress(0);设置初始进度为0,总共为0~99,对其监听用setOnSeekBarChangeLi ...

  6. [JS11] 状态栏滚动

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  7. JsRender for object 语法说明

    JsRender 作为一款JavaScript模版引擎,必不可少的会有循环功能,也就是for,但由于JsRender过于灵活,for竟然可以接受object作为循环对象. {{for Array}}和 ...

  8. Abp Application级别的生命周期

    本篇级别: 中高级篇,假设各位知道Abp是什么, Abp里面的基本的概念及用法(想了解基本概念的可在这里学习: http://www.cnblogs.com/mienreal/p/4358806.ht ...

  9. CSS 冲击波(水波纹)效果

    <span style="font-size:18px;"><!DOCTYPE html> <html> <head> <me ...

  10. How to use kingshard building a MySQL cluster

    How to use kingshard building a MySQL cluster https://github.com/flike/kingshard/blob/master/doc/Kin ...