我有一個ColdFusion應用程序,它從目錄中讀取文件列表,然後使用JODConverter庫和OpenOffice.org 3.4.1將列表中的每個MSOffice文檔轉換爲PDF。爲什麼我的電話啓動OpenOffice服務在開發中工作,而不是在服務器上工作?
我寫在這裏,根據這兩篇文章中的說明這個應用程序和設置我的開發PC:
http://cfsearching.blogspot.com/search/label/JODConverter
唯一的區別是,我安裝的cf_root
之外必要的JAR文件。
<cffunction name="convertNonPDFFiles" returntype="Void" output="false">
<cfscript>
// CONSTANTs
var _NON_PDF_PATH = APPLICATION.PDFSource & "\NonPDFs";
var _PDF_PATH = APPLICATION.PDFSource & "\PDFs";
var _VALID_FILE_EXTENSIONS = "doc,docx,ppt,pptx";
// Set defaults for private variables
var _qNonPDFDir = QueryNew("");
var _fileName = "";
var _documentId = 0;
var _sourceFilePath = "";
var _destinationFilePath = "";
var _fileExtension = "";
var _isConversionSuccessful = true;
var _tempSourceFilePath = "";
var _tempImageFilePath = "";
// Initialize Open Office Conversion Manager
var _openOfficeManager =
CreateObject(
"java",
"org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration"
).setOfficeHome(
APPLICATION.OpenOfficeProgramPath // Location of the OpenOffice.org 3.4.1 application directory on the server
).setTaskExecutionTimeout(60000).buildOfficeManager();
_openOfficeManager.start();
</cfscript>
<!--- Retrieve a list of file names in the directory of unprocessed
non-PDF files --->
<cfdirectory
action="list"
directory="#_NON_PDF_PATH#"
name="_qNonPDFDir"
type="file"
listinfo="name"
sort="datelastmodified DESC" />
<cfoutput query="_qNonPDFDir">
<cfscript>
_fileName = _qNonPDFDir.name;
_fileExtension =
REQUEST.UDFLib.File.getFileExtension(_fileName);
_sourceFilePath = _NON_PDF_PATH & "\" & _fileName;
// File is a valid format for conversion
if (ListFindNoCase(_VALID_FILE_EXTENSIONS, _fileExtension)) {
_documentId =
REQUEST.UDFLib.File.getFileNameWithoutExtension(
_fileName
);
_destinationFilePath =
_PDF_PATH
& "\"
& REQUEST.UDFLib.File.getFileNameWithoutExtension(
_fileName
)
& ".pdf";
_isConversionSuccessful = true;
_tempSourceFilePath =
APPLICATION.TempDir
& "\"
& _documentId
& "." & _fileExtension;
/*
Create of the copy of the original file in the temp
directory
*/
FileCopy(
APPLICATION.of_aprimo_root & "\" & _documentId & ".dat",
_tempSourceFilePath
);
// Attempt to convert the file to PDF
try {
// See convertFile() method below
convertFile(
openOfficeManager = _openOfficeManager,
inputFilePath = _tempSourceFilePath,
outputFilePath = _destinationFilePath
);
}
catch (any e) {
_isConversionSuccessful = false;
}
if (_isConversionSuccessful)
FileMove(
_sourceFilePath,
_NON_PDF_PATH & "\Processed\"
);
else
FileMove(
_sourceFilePath,
_NON_PDF_PATH & "\NonFunctioning\"
);
}
// File is not a valid format for conversion
else {
FileDelete(_sourceFilePath);
}
</cfscript>
</cfoutput>
<cfscript>
_openOfficeManager.stop();
return;
</cfscript>
</cffunction>
<cfscript>
function convertFile(openOfficeManager, inputFilePath, outputFilePath) {
CreateObject(
"java",
"org.artofsolving.jodconverter.OfficeDocumentConverter"
).init(ARGUMENTS.OpenOfficeManager).convert(
CreateObject(
"java",
"java.io.File"
).init(ARGUMENTS.inputFilePath),
CreateObject(
"java",
"java.io.File"
).init(ARGUMENTS.outputFilePath)
);
return;
}
</cfscript>
該應用程序在我的開發機器上工作完美,但只要我將它移動到我的Web服務器之一,它就不會在那裏工作。
開發PC設置:
OS: Windows 7 Professional SP1
IIS: 7
ColdFusion: 8.0.1
服務器設置:
OS: Windows 2003 R2 Standard Edition SP2
IIS: 6.0
ColdFusion: 8.0.1
當我試圖在服務器上運行的應用程序 - 無論是直接在瀏覽器中,或通過計劃任務,它沒有拋出異常。它似乎運行,直到60分鐘後超時。在任務管理器中,我可以看到soffice.bin在應用程序啓動時開始運行,但幾秒鐘後,soffice.bin就從任務管理器中消失。
任何想法可能是什麼問題?
你檢查,以確保'應用。 OpenOfficeProgramPath'在兩種環境中都是一樣的嗎? – Lance
@Lance,是的,我有,這是一個配置設置,在兩個環境中設置不同。我已經確認OpenOfficeManager對象已正確實例化,但當它調用start()時,它只是永遠不會回來...... –
聽起來好像連接可能有問題。日誌文件說什麼?另外,jodconverter是否可以在該機器上工作 - 例如從命令行? – Leigh