新闻资讯 | 控件产品 | 技术文章 | 购物车 | 合作伙伴 | 问题解答 | 电子简报 | PDF论坛 | 资源下载
您现在的位置:技术文章>PDF开发篇 首页|PDF应用篇|PDF开发篇|解决方案

word转pdf

发布日期:2008-12-29 作者:gavin_sw 出处:http://blog.csdn.net

 

本文内容参考:
http://www.matrix.org.cn/thread.shtml;jsessionid=B1E4B57897D51B59802D353CB6B32ACC?topicId=29594&forumId=17

准备工作:

1. 安装 "Adobe Acrobat 7.0 Professional" 并升级到"7.0.5"

2.安装"gs811w32.rar" (默认安装就可以了,它是一个PDF转换时所需要的脚本)

3.安装"postscript.rar" (默认安装就可以,它其实是个PDF虚拟打印机的驱动)

4.虚拟打印机配置,参考http://www.matrix.org.cn/thread.shtml;jsessionid=B1E4B57897D51B59802D353CB6B32ACC?topicId=29594&forumId=17

一点需要稍微留意:wordCom.setProperty("ActivePrinter"new Variant("MS Publisher Color Printer"));
这行代码中的"MS Publisher Color Printer"对应安装的虚拟打印机名称,请用以下代码测试。

/**
 * 
@author XuMing Li
 * 
 * 
@version 1.00, 2007-4-9
 *  
 
*/

public class D2P {
    
private ActiveXComponent wordCom = null;

    
private Object wordDoc = null;

    
private final Variant False = new Variant(false);

    
private final Variant True = new Variant(true);

    
/**
     * 打开word文档
     * 
     * 
@param filePath
     *            word文档
     * 
@return 返回word文档对象
     
*/

    
public boolean openWord(String filePath) {
        
//建立ActiveX部件
        wordCom = new ActiveXComponent("Word.Application");

        
try {
            
//返回wrdCom.Documents的Dispatch
            Dispatch wrdDocs = wordCom.getProperty("Documents").toDispatch();
            
//调用wrdCom.Documents.Open方法打开指定的word文档,返回wordDoc
            wordDoc = Dispatch.invoke(wrdDocs, "Open", Dispatch.Method,
                    
new Object[] { filePath }new int[1]).toDispatch();
            
return true;
        }
 catch (Exception ex) {
            ex.printStackTrace();
        }

        
return false;
    }


    
/**
     * 关闭word文档
     
*/

    
public void closeWord() {
        
//关闭word文件
        wordCom.invoke("Quit"new Variant[] {});
    }


    
/**
     * * 将word文档打印为PS文件后,使用Distiller将PS文件转换为PDF文件 *
     * 
     * 
@param sourceFilePath
     *            源文件路径 *
     * 
@param destinPSFilePath
     *            首先生成的PS文件路径 *
     * 
@param destinPDFFilePath
     *            生成PDF文件路径
     
*/

    
public void docToPDF(String sourceFilePath, String destinPSFilePath,
            String destinPDFFilePath) 
{
        
if (!openWord(sourceFilePath)) {
            closeWord();
            
return;
        }

        
//建立Adobe Distiller的com对象
        ActiveXComponent distiller = new ActiveXComponent(
                
"PDFDistiller.PDFDistiller.1");
        
try {
            
//设置当前使用的打印机,我的Adobe Distiller打印机名字为"Adobe PDF"
            wordCom.setProperty("ActivePrinter"new Variant("MS Publisher Color Printer"));
            
//设置printout的参数,将word文档打印为postscript文档。目前只使用了前5个参数,如果要使用更多的话可以参考MSDN的office开发相关api
            
//是否在后台运行
            Variant Background = False;
            
//是否追加打印
            Variant Append = False;
            
//打印所有文档
            int wdPrintAllDocument = 0;
            Variant Range 
= new Variant(wdPrintAllDocument);
            
//输出的postscript文件的路径
            Variant OutputFileName = new Variant(destinPSFilePath);

            Dispatch.callN((Dispatch) wordDoc, 
"PrintOut"new Variant[] {
                    Background, Append, Range, OutputFileName }
);
            System.out.println(
"由word文档打印为ps文档成功!");
            
//调用Distiller对象的FileToPDF方法所用的参数,详细内容参考Distiller Api手册
            
//作为输入的ps文档路径
            Variant inputPostScriptFilePath = new Variant(destinPSFilePath);
            
//作为输出的pdf文档的路径
            Variant outputPDFFilePath = new Variant(destinPDFFilePath);
            
//定义FileToPDF方法要使用adobe pdf设置文件的路径,在这里没有赋值表示并不使用pdf配置文件
            Variant PDFOption = new Variant("");
            
//调用FileToPDF方法将ps文档转换为pdf文档
            Dispatch.callN(distiller, "FileToPDF"new Variant[] {
                    inputPostScriptFilePath, outputPDFFilePath, PDFOption }
);
            System.out.println(
"由ps文档转换为pdf文档成功!");
        }
 catch (Exception ex) {
            ex.printStackTrace();
        }
 finally {
            closeWord();
            wordCom
=null;                        
            
//释放在程序线程中引用的其它com,比如Adobe PDFDistiller                        
            ComThread.Release(); 
        }

    }


    
public static void main(String[] argv) {
        D2P d2p 
= new D2P();
        d2p.docToPDF(
"d:/12.doc""d:/1p.ps""d:/1p.pdf");
    }

}
发布人:管理员 【报告错误】·【推荐好友】·【打印文章】
相关评论 本文现有 1 条评论 评分人数: 0 平均分: 0
hyfsoft   2009-3-5 11:56:37
用打印驱动就可以,网上多的是。
相关评论
用户名: 密  码:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
注意:请不要在评论中含与内容无关的广告链接,违者封ID
文章搜索
推荐文章
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
热门点击
一个简单的PDF文件结构的分析(22721)
PHP的FDF文档支持(16256)
用C#制作PDF文件全攻略(13679)
Word转换PDF格式的C#或(12199)
ITextRenderer学习(11683)
pdfMaker文章:PDF加(11682)
PDF文件加密仿真(11103)
怎样用iReport制作Web(10463)
iText PDF概述(1)(10038)
从pdf文档中提取出文本(9968)
热门评论
从pdf文档中提取出文本(8)
PDFlib开发:创建超文本元(2)
客户端自动打印PDF(Prin(2)
浅谈PDFlib中文输出(一)(2)
xml的转换之pdf 2 ((1)
xml的转换之pdf 1 (x(1)
PDF知识讲座(1)(1)
PDFBox使用简介(1)
使用正则表达式计算PDF文档的(1)
word转pdf(1)