2009-01-08 68 views
2

我對ASP並不熟悉,但我正在幫助某人將他們的網站作爲輔助項目。我試圖從ASP使用VB調用Apache FOP(一個Java應用程序)。我已經看到了使用GetObject('java:...')構造的簡單示例,但我不知道如何從java對象傳遞和檢索二進制數據。理想情況下,我會在內存中完成這一切 - 我寧願不必將我的數據寫入磁盤,在該文件上調用FOP(將讀取該文件,然後寫入一個新文件),然後重新啓動該文件,從磁盤讀取數據。該網站不是忙,所以我可以做到這一點,但它似乎並不高效。如何從asp調用java?

回答

0

我想出了一個解決方法。這適用於在Win 2k3服務器上運行的IIS - 舊版本會更容易。

首先我從主站點創建了一個子目錄(出於安全目的),並將一個新的應用程序池附加到該目錄。新的應用程序池需要作爲本地系統運行。我不能讓fop.bat工作,甚至作爲本地系統運行,但我可以調用java,所以我把整個FOP命令行到我的ASP腳本,類似這樣的片段:

Dim shell, foppath, workpath 
Set shell = Server.CreateObject("WScript.Shell") 

foppath = Server.MapPath("/fop/") 
workpath = Server.MapPath("/tmp/") 
shell.CurrentDirectory = foppath 

Dim commandline 
commandline = "java -Denv.windir=C:\WINDOWS -cp """ 
'set classpath 
commandline = commandline & foppath & "\build\fop.jar;" 
commandline = commandline & foppath & "\build\fop-sandbox.jar;" 
commandline = commandline & foppath & "\build\fop-hyph.jar;" 
commandline = commandline & foppath & "\lib\xml-apis-1.3.04.jar;" 
commandline = commandline & foppath & "\lib\xml-apis-ext-1.3.04.jar;" 
commandline = commandline & foppath & "\lib\xercesImpl-2.7.1.jar;" 
commandline = commandline & foppath & "\lib\xalan-2.7.0.jar;" 
commandline = commandline & foppath & "\lib\serializer-2.7.0.jar;" 
commandline = commandline & foppath & "\lib\batik-all-1.7.jar;" 
commandline = commandline & foppath & "\lib\xmlgraphics-commons-1.3.1.jar;" 
commandline = commandline & foppath & "\lib\avalon-framework-4.2.0.jar;" 
commandline = commandline & foppath & "\lib\commons-io-1.3.1.jar;" 
commandline = commandline & foppath & "\lib\commons-logging-1.0.4.jar;" 
commandline = commandline & foppath & "\lib\jai_imageio.jar;" 
commandline = commandline & foppath & "\lib\fop-hyph.jar;" 
commandline = commandline & """ org.apache.fop.cli.Main " 
commandline = commandline & workpath & "/file.fo " 
commandline = commandline & workpath & "/file.pdf " 

Dim ResultCode 
ResultCode = Shell.Run(commandline,,True) ' True = Wait for FOP to finish 

之後,我確保我清理了我的臨時文件等。也許不是最優雅的解決方案,但考慮到需要,我相信它會工作很長時間。

1

我不會擔心效率,直到我觀察到一個問題,測量結果告訴我FOP解決方案是罪魁禍首。

我會建議一個異步調用Web服務。發送包含XML輸入流和XSL-T樣式表的消息。讓服務將PDF寫入本地磁盤。將郵箱添加到您的用戶界面,以便在PDF準備好提取時提醒用戶。點擊鏈接,PDF將流式傳輸到瀏覽器。用戶可以根據需要查看或保存到本地磁盤。

Asynch在這種情況下很好,因爲您不知道轉換可能需要多長時間。爲什麼讓用戶等待?讓他們稍後再回來看看。一個AJAX調用來檢查新的PDF將是優雅的。

+0

這比我們這個應用程序需要的複雜一點。只需要創建工單的pdf並將副本通過電子郵件發送給請求者。想用最少的硬件來做到這一點。 沒有必要用大炮殺死一隻螞蟻。 – molson 2009-01-09 15:42:44

0

你如何添加配置文件-c的conf \ fop.xconf或-c C:\ FOP \的conf \ fop.xconf 上述優秀作品

TA的!