关于doc转化为pdf,多用户同时访问的问题

matrix1984 2008-09-12 03:19:21
doc转化为pdf,我是用了一个大家都在用的程序(代码如下,使用Adobe Distiller打印机),好像不支持多用户同时打印,有什么解决的办法吗?


package com.rizon.word2pdf;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

/**
* 把word文档转化为pdf文档
*
* @author SUJL
*
*/
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(boolean saveOnExit) {
if (wordCom!=null) {
//关闭word文件
//Dispatch.call(wordDoc, "Close", new Variant(saveOnExit));
wordCom.invoke("Quit",new Variant[]{});
//wordCom.invoke("Quit",new Variant[0]);
wordCom.release(); //add 2008-07-07
wordCom=null;
//释放在程序线程中引用的其它com,比如Adobe PDFDistiller
ComThread.Release();
}
}

/**
* 将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(true);
return;
}
//建立Adobe Distiller的com对象
ActiveXComponent distiller = new ActiveXComponent("PDFDistiller.PDFDistiller.1"); //必须安装Acrobat Distiller!
try {
//设置当前使用的打印机,我的Adobe Distiller打印机名字为 "Adobe PDF"
wordCom.setProperty("ActivePrinter", new Variant("Adobe PDF"));
//设置printout的参数,将word文档打印为postscript文档。目前只使用了前5个参数,如果要使用更多的话可以参考MSDN的office开发相关api
//是否在后台运行
Variant Background = True;
//是否追加打印
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 });//多用户同时访问时,此处报错

//add 2008-07-07
Dispatch.call(wordDoc, "Close", new Variant(false));

System.out.println("由ps文档转换为pdf文档成功!");
} catch (Exception ex) {
ex.printStackTrace();
} finally {
closeWord(true);
}
}

public static void main(String[] argv) {
D2P d2p = new D2P();
//d2p.openWord("D:/D2P/doc/doc.doc");
//d2p.callWordMacro( "c:/12.docc ", "MyWordMacro ",
// new String[] { "这是调用word宏的测试程序" } );
d2p.docToPDF("D:/D2P/doc/doc.doc", "D:/D2P/ps/ps.ps", "D:/D2P/pdf/pdf.pdf");
//d2p.docToPDF("D:/D2P/doc/部署说明.doc", "D:/D2P/ps/部署说明.ps", "D:/D2P/pdf/部署说明.pdf");
}
}




...全文
919 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqpsswh 2010-11-19
  • 打赏
  • 举报
回复
adddddd
thomas.he 2009-02-20
  • 打赏
  • 举报
回复
我正在学习中
commanager 2008-09-16
  • 打赏
  • 举报
回复
没有用过,帮你盖楼吧
laorer 2008-09-16
  • 打赏
  • 举报
回复
A COM exception has been encountered

这个是调用com组件?
没用过,帮顶吧
matrix1984 2008-09-12
  • 打赏
  • 举报
回复
报错信息:
com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: FileToPDF
Description: ·????÷?????????????

at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:384)
at com.jacob.com.Dispatch.callN(Dispatch.java:252)
at com.rizon.word2pdf.D2P.docToPDF(D2P.java:106)
at com.rizon.word2pdf.CreatePDF.execute(CreatePDF.java:90)
at com.rizon.db2word.nzzjrws.NzzjWords.createWords(NzzjWords.java:217)
at com.rizon.db2word.nzzjrws.NzzjWords.execute(NzzjWords.java:266)
at com.rizon.db2word.service.CreateWordsSoapBindingImpl.create(CreateWor
dsSoapBindingImpl.java:33)
at com.rizon.db2word.service.CreateWordsSoapBindingSkeleton.create(Creat
eWordsSoapBindingSkeleton.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.j
ava:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider
.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:
323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrateg
y.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454
)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:69
9)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBas
e.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.p
rocessConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpo
int.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFol
lowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:684)
at java.lang.Thread.run(Thread.java:595)

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧