最近在研究pdf to img 看了网上一些资料没找到个实用的,用第三方程序怕有问题,于是就想利用Adobe Acrobat 7.0 Professional 自带的导出图片的功能,资料忒少啊。找了半天,下面这个比较有用。不过说句实在话,我只是用别人的东西,没自己原创的东西。

原文:http://fidodido2010.spaces.live.com/blog/cns!42DBF9483C966838!129.entry

---------------------------------------------------------------------------------------------------------------------------

PDF转换成其他格式的COM解决方案
需求起源:

最近图片格式之间相互转换做得比较多,以往的转换LEADTOOLS R13肯定能搞定,却发现有一部分PDF用LEADTOOLS打不开,只好又把Acrobat捡起来了.

研究了半天,总算找到个办法,却被AcroExch.PDDoc的一个接口GetJSObject()难住了.照理说,这个接口返回的是一个JavaScript对象,可是C++下却没有相应的类型说明,只能用IDispatch,调用机制及IType完全搞不清楚,所有的能G到的相关内容几乎全是VB的,只有一个可怜的老外问过"Using GetJSObject() in C++"的问题,而且答案还是"since it involves low level COM API's to get directly to the IDispatch for the object.".

正想以头抢地,或者考虑整个工程迁移到VB下去,忽然想起,何不用VB做个专门调用这个接口的COM,在C++下面调用?

说干就干

用VB6编写Acrobat COM:

建立一个VB6的ActiveX Dll工程,工程名称改为MPDF2SIMG(Multi-page PDF to Single-page Image),模块名改为Converter,添加引用"Adobe Acrobat 7.0 Type Library".模块的全部代码如下:

Option Explicit On

Dim oApp As Acrobat.CAcroApp
Dim oMultiPageDoc As Acrobat.CAcroPDDoc
Dim oSinglePageDoc As Acrobat.CAcroPDDoc
Dim JSO As Object

Private Sub Class_Initialize()
    oApp = CreateObject("AcroExch.App")
    oMultiPageDoc = CreateObject("AcroExch.PDDoc")
End Sub

Public Function ConvertPDF(ByVal SourcePDF As String, _
    ByVal TargetFolder As String, _
    ByVal TargetFormat As String, _
    ByVal StartImgNumber As Integer) As Integer

Dim iNumbers As Integer
    Dim i As Integer
    Dim OutPath As String
    Dim OutFile As String

OutPath = TargetFolder
    If Right(OutPath, 1) <> "\" Then OutPath = OutPath & "\"

On Error GoTo err1

oMultiPageDoc.Open(SourcePDF)

iNumbers = oMultiPageDoc.GetNumPages

For i = 0 To iNumbers - 1
        oSinglePageDoc = CreateObject("AcroExch.PDDoc")
        oSinglePageDoc.Create()
        oSinglePageDoc.InsertPages(-1, oMultiPageDoc, i, 1, 0)
        JSO = oSinglePageDoc.GetJSObject
        OutFile = OutPath & Format(i + StartImgNumber, "00000000") & _
            ".tif"
        JSO.SaveAs(OutFile, "com.adobe.acrobat." & TargetFormat)
        JSO = Nothing
        oSinglePageDoc = Nothing
    Next

oMultiPageDoc.Close()
    oApp.CloseAllDocs()
    ConvertPDF = iNumbers
    Exit Function
err1:
    ConvertPDF = -1
End Function

Private Sub Class_Terminate()
    oMultiPageDoc = Nothing
    oSinglePageDoc = Nothing
End Sub然后编译成DLL.  使用这个DLL的方法:1.在计算机上运行regsvr32 mpdf2simg.dll注册这个DLL.2.使用这个DLL的C++程序里导入该COM的类型库,代码如下:#import "E:\project\Converter\mpdf2simg.dll"
using namespace MPDF2SIMG;3.定义COM型变量并建立实例,代码如下:

_ConverterPtr    pConverter;
HRESULT hr = pConverter.CreateInstance(_T("MPDF2SIMG.Converter"));
if(!FAILED(hr))
{
    //do something if failed.
    ...
}4.调用该COM的接口

int nConv = pConverter->ConvertPDF(
    CString(_T("xxxxxx\\source.pdf")).AllocSysString(),
    CString(_T("d:\\TargetPath")).AllocSysString(),
    CString(_T("tiff")).AllocSysString(),
    nStart);该调用会将指定的SoucePDF转至TargetPath下连续的单页TIFF文件,文件名为8位数字编号形式,编号起始由nStart指定.

调用成功返回转换的页数,失败返回-1

其他支持的格式:

值  可用扩展名 
"com.adobe.acrobat.eps"  eps 
"com.adobe.acrobat.html-3-20"  html, htm 
"com.adobe.acrobat.html-4-01-css-1-00"  html, htm 
"com.adobe.acrobat.jpeg"  jpeg, jpg, jpe 
"com.adobe.acrobat.jp2k"  jpf, jpx, jp2, j2k, j2c,jpc 
"com.adobe.acrobat.doc"  doc 
"com.adobe.acrobat.png"  png 
"com.adobe.acrobat.ps"  ps 
"com.adobe.acrobat.rtf"  rtf 
"com.adobe.acrobat.accesstext"  txt 
"com.adobe.acrobat.plain-text"  txt 
"com.adobe.acrobat.tiff"  tiff, tif 
"com.adobe.acrobat.xml-1-00"  xml

已知问题和BUG:

如果C++程序使用多字节字符集编译, TargetPath中含有中文字符会导致无法正常转换,ConvertPDF调用会导致弹出"无法保存文件"的Acrobat对话框, 点确定ConvertPDF会返回-1.Unicode字符集未做测试.

补充说明:

使用Acrobat COM, 应在计算机上部署Adobe Acrobat (Not Reader).

-----------------------------------我自己的就简单了用-Adobe professinal-------------------------------

   Dim gApp As Acrobat.CAcroApp
        Dim oMultiPageDoc As Acrobat.CAcroPDDoc
        Dim oSinglePageDoc As Acrobat.CAcroPDDoc
        Dim iNumbers As Integer
        Dim StartImgNumber As Integer
        Dim OutFile As String
        Dim i As Integer
        Dim jso As Object
        gApp = CreateObject("AcroExch.App")
        oMultiPageDoc = CreateObject("AcroExch.PDDoc")

'pdf和生成的文件要在同一个文件夹下
        If oMultiPageDoc.Open("F:\test.pdf") Then

iNumbers = oMultiPageDoc.GetNumPages

For i = 0 To iNumbers - 1
                oSinglePageDoc = CreateObject("AcroExch.PDDoc")
                oSinglePageDoc.Create()
                oSinglePageDoc.InsertPages(-1, oMultiPageDoc, i, 1, 0)
                jso = oSinglePageDoc.GetJSObject
                OutFile = Format(i + StartImgNumber, "00000000") & ".png"
                jso.SaveAs("F:\" & OutFile, "com.adobe.acrobat.png")
                jso = Nothing
                oSinglePageDoc = Nothing
            Next

End If

-----附送一个用GhostScriptView的----------------

C:\Program Files\gs\gs8.61\bin\gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -r300 -sDEVICE=png16m -dGraphicsAlphaBits=4

-sOutputFile="F:\test.pdf"  "F:\test\"

转载于:https://www.cnblogs.com/panzhilei/archive/2010/10/09/1846806.html

利用Adobe Acrobat 7.0 Professional 自带的导出图片的功能(转)相关推荐

  1. Adobe Acrobat 9.0“ PDFMaker无法找到Adobe PDF Printer 的打印驱动程序”解决办法

    [问题症状] 安装Adobe Acrobat Perfessional 9.0后,office工具栏中会显示两个按钮.正常情况下,可以点击按钮直接将当前的office文档转化为pdf文档,同样IE工具 ...

  2. 利用Adobe Acrobat DC制作pdf模板后,使用java直接生成pdf至本地指定路径或导出pdf文件

    参考文章来源: springboot+itextpdf按模板生成PDF文件及在线下载PDF文件 JAVA根据模板生成PDF文件并导出 java将字符串按照指定长度分割成字符串数组 感谢上述博主大大,救 ...

  3. 解决安装Adobe Acrobat 8.0提示验证原版序列号的问题

    网上下载的一个 非授权拷贝 Acrobat 8.0,在全新的系统安装时总是提示验证原版序列号. 经过分析安装的配置文件,发现其指定程序从Acrobat 7.0升级安装,(就是说用升级的模式,而并非全新 ...

  4. 利用adobe acrobat裁剪PDF

    adobe acrobat可以很方便地使用设置页边距的方法来对pdf进行裁剪. 但是这种裁剪是伪裁剪, 只是把显示的区域换了,整个PDF都还在. 所以文件大小也不会改变. 关于裁剪pdf, 网上有很多 ...

  5. PDF | 利用Adobe acrobat pro 对PDF进行拆分

    文章目录 简介 总结 简介 一直知道Adobe acrobat pro功能很强大,但是自己用的并不多,只是在每个电脑上都安装了这个软件.之前帮别人处理过PDF,删除和修改PDF上的文字之类的. 今天用 ...

  6. Adobe Acrobat 8.0 注册机失效的解决办法

    1.删除"C:/Documents and Settings/All Users/Application Data/FLEXnet/"文件夹下面的两个文件,运行acrobat,稍等 ...

  7. 从福昕阅读器到Adobe Acrobat Professional

    背景:电脑换了个新硬盘,因此所有东西全部重装-- 今天使用ISE 10.1 打开往常的工程后,我想看一下IP核的Datasheet,于是在工程的sources中双击IP核的源文件(如异步FIFO的源文 ...

  8. Adobe Acrobat 8 Professional(PDFMaker文件遗失的解决方法)

    直接打开Adobe Acrobat 7.0 Professional创建DOC文件到PDF时,出现"PDFMaker 文件遗失 要在修复模式下运行安装程序吗",点击"是& ...

  9. Adobe Acrobat Professional 7.0

    软件大小:未知 软件语言:未知 软件类别:国外软件 / 授权未知 / 电子阅读 运行环境:Win9x/NT/2000/XP/ 软件更新:2005-2-6 13:20:05 页面刷新:2005-2-28 ...

最新文章

  1. mysql语句生成工具_强烈推荐一款MySQL语句优化辅助工具,值得收藏
  2. 设备树 xlnx-phy 使用
  3. ubuntu和windows双系统时间错乱问题
  4. python 处理excel
  5. 3.IDA-数据显示窗口(导出窗口、导入窗口、String窗口、...窗口)
  6. hdu2844 Coins(普通的多重背包 + 二进制优化)
  7. 没有找到 AUTOBACKUP
  8. Codeforces Round #302 (Div. 2)
  9. c语言——实现简单扫雷小游戏
  10. css5导弹,世界六大洲际导弹排行榜
  11. JS匀速运动案例01
  12. 云剪智能混剪软件/批量剪辑工具技术源码框架---- 一键生成上亿条原创视频
  13. java使用poi操作world生成饼图,柱状图,折线图,组合图:一
  14. C++使用redis实例
  15. aText--问题四:Need a valid command-line; Edit the string resources accordingly
  16. 机械中计算机的应用研究,机械设计制造自动化中计算机技术的应用
  17. lvds 屏点亮的过程记录
  18. H5页面在iPhoneX适配
  19. html2canvas图片生成file格式传送到后台服务器
  20. 2021年 第七届 互联网+大赛 报名详细流程 全国大学生互联网+大赛全国大学生创业网 (保姆级指南:如何同意对方邀请)

热门文章

  1. 文思海辉笔试题目java_2013文思海辉java笔试题(最新版带答案).doc
  2. 华为 GRE实验(GRE隧道)
  3. Rosalind Java|Open Reading Frames
  4. Android屏幕适配 - 屏幕基础理论知识笔记;res资源文件命名与匹配规则
  5. Nginx优化(精品)
  6. CSS第三级选择器 Selectors Level 3 文档翻译
  7. Redis缓存高可用集群
  8. Golang精编100题-搞定golang面试
  9. 基于Java实现在线翻译【100010578】
  10. Elasticsearch实战 | match_phrase搜不出来,怎么办?