`
whfish
  • 浏览: 33902 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

word文件转成pdf文件

阅读更多
关键字:word,pdf ,java
word文件转成pdf文件主要是打开WORD文档通过PDF虚拟打印机输出成PDF文件。
第一步:安装相关软件。
1、office
2、AcroPro8 (专业版)
3、gs811w32(PDF转换时所需要的脚本ps)
4、postscript(PDF虚拟打印机的驱动)
第二步:配置java操作word插件
先下载jacob包,把包中一个DLL动态库复制window系统system32目录
第三步:编写java类,如下:
import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import org.apache.commons.lang.StringUtils;

public class WordToPDF {
/**
* wordCom ActiveX部件
*/
private ActiveXComponent wordCom = null;

/**
*   wordDoc word文档
*/
private Object wordDoc = null;

/**
*  False 的Variant对象
*/
private final Variant False = new Variant(false);

/**
* true 的Variant对象
*/
private final Variant True = new Variant(true);


/**
* word文档路径
*/
private String sDocFilePath;


/**
* ps文档路径
*/
private String sPsFilePath;

/**
* pdf文档路径
*/
private String sPdfFilePath;


/**
* 密码
*/
private String password=null;
private String password1="whxxmm@yahoo.com.cn";

/**
* 加密码文件路径
*/
private String SWaterMarkPath;

/**
* 是否显示后台打印
*/
private boolean bPrintDos=false;


    public WordToPDF(){
   
    }
   
    public WordToPDF(boolean bool){
    this.bPrintDos=bool;
    }


/**
* @return the bPrintDos
*/
public boolean isBPrintDos() {
return bPrintDos;
}

/**
* @param printDos the bPrintDos to set
*/
public void setBPrintDos(boolean printDos) {
bPrintDos = printDos;
}

/**
* @return the password1
*/
public String getPassword1() {
return password1;
}

/**
* @param password1 the password1 to set
*/
public void setPassword1(String password1) {
this.password1 = password1;
}

/**
* @return the password
*/
public String getPassword() {
return password;
}

/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}

/**
* @return the sDocFilePath
*/
public String getSDocFilePath() {
return sDocFilePath;
}

/**
* @param docFilePath the sDocFilePath to set
*/
public void setSDocFilePath(String docFilePath) {
sDocFilePath = docFilePath;
}

/**
* @return the sPdfFilePath
*/
public String getSPdfFilePath() {
return sPdfFilePath;
}

/**
* @param pdfFilePath the sPdfFilePath to set
*/
public void setSPdfFilePath(String pdfFilePath) {
sPdfFilePath = pdfFilePath;
}

/**
* @return the sPsFilePath
*/
public String getSPsFilePath() {
return sPsFilePath;
}

/**
* @param psFilePath the sPsFilePath to set
*/
public void setSPsFilePath(String psFilePath) {
sPsFilePath = psFilePath;
}

/**
* @return the sWaterMarkPath
*/
public String getSWaterMarkPath() {
return SWaterMarkPath;
}

/**
* @param waterMarkPath the sWaterMarkPath to set
*/
public void setSWaterMarkPath(String waterMarkPath) {
SWaterMarkPath = waterMarkPath;
}

/**
* 打开word文档
*
* @param filePath
*            word文档
* @return 返回word文档对象
* @throws Exception
*/
public boolean openWord(String filePath) throws Exception {
boolean bool=false;
// 建立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();
bool=true;
} catch (Exception ex) {
if(bPrintDos){
System.out.println("openWord - "+ex.getMessage());
}
throw new Exception("打开WORD应用程序出错!!!");
}
return bool;
}

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

/**
* * 将word文档打印为PS文件后,使用Distiller将PS文件转换为PDF文件 *
*
* @param sourceFilePath
*            源文件路径 *
* @param destinPSFilePath
*            首先生成的PS文件路径 *
* @param destinPDFFilePath
*            生成PDF文件路径
* @throws Exception
*/
public void docToPDF(String sourceFilePath, String destinPSFilePath,
String destinPDFFilePath) throws Exception {
if (!openWord(sourceFilePath)) {
closeWord();
return;
}
// 建立Adobe Distiller的com对象
ActiveXComponent distiller = new ActiveXComponent(
"PDFDistiller.PDFDistiller.1");
try {
// 设置当前使用的打印机,我的Adobe Distiller打印机名字为"Adobe PDF"
// MS Publisher Color Printer为打印机的名称。
wordCom.setProperty("ActivePrinter", new Variant(
"Adobe PDF")); //必需根打印名字一样呀:"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 });
if(bPrintDos){
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文档
Variant s=Dispatch.callN(distiller, "FileToPDF", new Variant[] {
inputPostScriptFilePath, outputPDFFilePath, PDFOption });
if(bPrintDos){
     System.out.println("由ps文档转换为pdf文档成功!");
}
} catch (Exception ex) {
if(bPrintDos){
System.out.println("docToPDF  - "+ex.getMessage());
}
throw new Exception("WORD文档转换PDF文档配置有误,请联系管理员!!!");
} finally {
closeWord();
wordCom = null;
// 释放在程序线程中引用的其它com,比如Adobe PDFDistiller
ComThread.Release();
}
}

/**
* 在pdf文件中添加水印,加密
* @param inputFile   原始文件
*
* @param outputFile  水印输出文件
*
* @param userPassWord 用户密码
*       
* @param ownerPassWord  安全密码
*       
* @param waterMarkName  水印名字(暂时没有加此功能)
*
* @param permission
*/
public void waterMark(String inputFile, String outputFile,
String userPassWord, String ownerPassWord, String waterMarkName,
int permission) throws Exception {
PdfStamper stamper=null;
try {
// 设置密码
PdfReader reader = new PdfReader(inputFile);
stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
if(StringUtils.isNotBlank(userPassWord)){
stamper.setEncryption(userPassWord.getBytes(), ownerPassWord.getBytes(), permission, false);
}else {
stamper.setEncryption(null, null, permission, false);
}
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.NOT_EMBEDDED);
stamper.close();
} catch (Exception e) {
if(bPrintDos){
System.out.println("waterMark  - "+e.getMessage());
}
throw new Exception("文件已经加密或文件损坏,请联系管理员!!!");
}finally{
if(bPrintDos){
System.out.println("文件加密成功!");
}

}
}

/**
* 把一个WORD文档转换成PDF
* @throws Exception
*/
public void docToPDF() throws Exception{
this.docToPDF(sDocFilePath,sPsFilePath,sPdfFilePath);
}


/**
* 把一个WORD文档转换成PDF
* @param path WORD文档路径
* @throws Exception
*/
public void DtoP(String path) throws Exception{
if(StringUtils.isBlank(path)){
throw new Exception("没有WORD文档");
}
this.sDocFilePath=path;
this.sPsFilePath=this.headerPath(path)+".ps";
        this.sPdfFilePath=this.headerPath(path)+".pdf";
this.docToPDF();

}

/**
*  取一个文件路径,把这文件路径中的文件扩展名除掉。
* @param path 文件全路径
* @return
*/
public String headerPath(String path){
String header=path.substring(0, path.lastIndexOf("."));
return header;
}

/**
* 删除转换时的临时文件,PS和LOG、pdf
* @param path 文件路径(文件扩展名除掉)
*/
public void removefile(String path){
String header=this.headerPath(path);
File f1=new File(header+".log");
f1.delete();
File f2=new File(header+".ps");
f2.delete();
if(StringUtils.isNotBlank(this.SWaterMarkPath)){
File f3=new File(header+".pdf");
f3.delete();
}

}

/**
* 删除转换时的临时文件,PS和LOG、pdf
*
*/
public void removefile(){
this.removefile(this.sPdfFilePath);
}

/**
* 加密PDF文件
* @throws Exception
*/
public void waterMark() throws Exception{
String pass=null;
String pass1=null;
String water=null;
if(StringUtils.isNotBlank(password)){
pass=password;
pass1=password1;
water=this.headerPath(this.sPdfFilePath)+"@@.pdf";
}else{
water=this.headerPath(this.sPdfFilePath)+"@.pdf";
}

String input=this.sPdfFilePath;
this.waterMark(input, water, pass,pass1, null, 0);
this.SWaterMarkPath=water;
}

public static void main(String[] argv) {
String docFile = "d:/12.doc";
WordToPDF wordToPDF = new WordToPDF();
try {
wordToPDF.DtoP(docFile);
// wordToPDF.setPassword("1234");
// wordToPDF.waterMark();
wordToPDF.removefile();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


}
分享到:
评论
1 楼 me_yidan 2012-03-02  
这个功能不适合服务器未登录状态!

相关推荐

    WORD文件转换成PDF文件

    4. 转换完成后,用户可以选择保存位置,保存生成的PDF文件。 5. "下载说明.html"和"下载安装说明.txt"可能是提供给用户关于如何获取和安装这个转换工具的详细指南,包括系统需求、安装步骤、使用技巧等内容。 为了...

    C# 使用 Aspose.Words将word文件转成PDF文件

    此外,它还可以处理复杂的文档格式,如页眉、页脚、图片、表格、样式等,保证转换后的PDF文件尽可能保持原始Word文档的布局和格式。 总的来说,通过Aspose.Words库,C#开发者可以轻松地在应用程序中实现Word到PDF的...

    word2010生成目录_将word转换成PDF.doc

    Microsoft Word 2010 是一种功能强大的文字处理软件,它提供了许多实用的功能,包括自动生成目录和将 Word 文档转换成 PDF 文件。本文将详细介绍如何使用 Word 2010 自动生成目录和将 Word 转换成 PDF。 一、自动...

    使用poi根据模版生成word文档并转换成PDF文件

    本文将深入探讨如何利用Apache POI框架根据模板生成Word文档,并进一步将其转换为PDF文件。 首先,Apache POI提供了一个名为HWPF(Horrible Word Processor Format)的组件,用于处理Word文档。通过这个组件,我们...

    Word、Excel、PPT文件转换成PDF文件(C#)

    使用C#将Word、Excel、PPT文件转换成PDF文件 1,使用VS2017编译程序 2,点击添加文件,选择word文件,点击【word转pdf】,PDF文件生成到桌面; 3,点击添加文件,选择excel文件,点击【excel转pdf】,PDF文件生成到...

    Word转换成PDF转换器 v3.0.exe

    它支持Word 2010 (Docx转换成PDF), Word 2007 (Docx转换成PDF), Word 2003 (Doc转换成PDF), Word 2000 (Doc转换成PDF)和Word 97(Doc转换成PDF)的文件格式到PDF,它还包括的文件格式如, RTF,文本文件和图像格式PDF...

    office2021word文档转换成pdf格式方法.docx

    Office 2021 Word 文档转换成 PDF 格式方法 office 2021 word 文档转换成 pdf 格式方法是指将 Word 文档转换成可读性强、可分享性高的 PDF 格式文档。为实现此功能,需要使用 doPDF 虚拟打印机软件。下面将详细介绍...

    C#中PDF文件转WORD文件

    在.NET环境中,C#语言提供了丰富的库和方法来处理各种文件操作,包括将PDF文件转换为Word文档。这种转换在很多场景下都是有用的,比如数据提取、格式转换或编辑PDF内容时。本篇将深入探讨如何在C#中实现PDF到Word的...

    实现Word转PDF(基于SWT)

    网络上有很多种Word转PDF的方式(openoffice,jacob,POI),但都不是很完美,要不依赖三防包还要下载dll文件,要不转换不完美,还不支持中文,我的转换方式使用eclipse自带的swt包即可,程序引用swt的jar后直接运行

    PDF文件转WORD文档

    PDF文件转WORD文档是一项常见的文件格式转换操作,尤其在办公环境中极为常见。PDF(Portable Document Format)文件格式因其良好的跨平台阅读性和防止篡改的特性而广泛使用,但有时我们需要编辑其中的内容,这时就...

    word,excel,ppt文件转换成pdf文件

    描述中提到的"word文件,excel文件,ppt文件转换成pdf文件,java代码实现,已经集成为工具类,可以直接使用,自测ok"表明已经有开发者编写了一个工具类,该类能够处理这些转换操作,并且经过测试,功能正常。...

    python将Word、Excel和PPT批量转成PDF文档

    办公自动化python将Word、Excel和PPT批量转成PDF文档,win32com操作word文档、Excel表格和PPT文档,WPS转为PDF文件。提高办公效率,快速阅读office文件,保护office文件格式和文件安全。

    word文档转换为PDF格式文件

    此外,互联网上有许多免费或付费的在线转换服务,如 Smallpdf、ILovePDF 等,只需上传Word文件,它们就能自动将其转换为PDF。这种方式适合不希望安装额外软件且文件大小适中的用户,但需要注意的是,线上服务可能...

    pdf怎么转换成word?教你pdf转换word文档的方法.docx

    例如,我们需要将 PDF 文件转换成 Word 文档以便编辑和修改,或者我们需要将 Word 文档转换成 PDF 文件以便共享和保护。掌握 PDF 转换 Word 文档的方法可以帮助我们快速地将 PDF 文件转换成 Word 格式,以满足我们的...

    PDF转成WORD工具完整版

    PDF转成WORD工具完整版是一款专门用于将PDF文档转换为Microsoft Word格式的软件。这款工具旨在帮助用户在处理文档时实现格式的灵活转换,尤其是在PDF文档无法直接编辑的情况下,通过转换为Word格式可以进行自由编辑...

    C#转换PDF文件为word Execl文件

    C#转换PDF文件为word Execl文件 C#转换PDF文件为word Execl文件C#转换PDF文件为word Execl文件 C#转换PDF文件为word Execl文件C#转换PDF文件为word Execl文件C#转换PDF文件为word Execl文件C#转换PDF文件为word ...

    Word转PDF文件,如何在PDF中嵌入字体[收集].pdf

    Word 转 PDF 文件中的字体嵌入方法 在软件开发中,经常需要将 Word 文档转换为 PDF 文件,并在 PDF 文件中嵌入字体,以满足某些杂志的上传要求,例如 ASCE 杂志。下面将详细介绍如何在 PDF 文件中嵌入字体。 首先...

    java代码实现word转换成pdf

    该方法应该接受Word文件路径作为参数,返回生成的PDF文件路径,或者直接将PDF数据输出到流中。 - 方法内部会包含上述的打开Word、创建PDF、转换内容和保存PDF的步骤。 总的来说,Java实现Word到PDF的转换涉及多...

    Word转PDF转换器(支持大文件转换) v2.1

    易捷Word转PDF转换器是一款小巧好用、支持批量Word文档转换成PDF文件的PDF转换软件。它完全免费下载和使用,帮助您在工作学习中,轻松方便的将各种Word文档(Word2003 .doc格式 / Word2007/2010 .docx格式)转换成...

Global site tag (gtag.js) - Google Analytics