0

私は、Plone Web サイト内で実行されるアプレットに取り組んでいます。Plone によって管理されているページの 1 つで、次の手順を実行するこのアプレットを実行する必要があります。

  • 高度なフォーム検証

  • サーバーのハードディスク上のExcelテンプレートを取得し、一部のデータを名前として追加してコピーします(calcoloOneri.xlsがcalcoloOneriJohnFileOne.xlsになるように)

  • 新しく作成されたファイルにフォームデータを書き込みます

  • このファイルを、Excel を PDF に変換するために作成した Web サービスに送信します

  • ユーザーが自分のマシンにPDFをダウンロードできるようにします

ここでの問題は、さまざまな Web サイトの複数のインスタンスが、名前とその他のわずかな点だけが異なる可能性があるため、アプレットをパラメーター化して、これらのさまざまなシナリオのそれぞれに実行することです。template.xls ファイルの場所には特に注意を払いましたが、サイトの構造やファイル名の必要性によって異なる場合があります。アプレットをロードするコードは次のとおりです (ロードされたページから取得)。

<script src="http://www.java.com/js/deployJava.js"></script>
<script>var user='admin'</script>
<script>var comune='Andria'</script>
<script>var numPratica=''</script>
<script>var numPreinoltro='20482109022013'</script>
<script>var classifica=''</script>
<script>var numFascicolo=''</script>
<script>var annoFascicolo=''</script>
<script>var portalURL='http://xx.xx.xx.xx:xxxx/scia2'</script>
<script>
  var attributes = {code:'geotel.gui.Login.class', archive:'portal_url/++resource++java/GestioneOneri.jar, portal_url/++resource++java/mysql-connector-java-5.1.20-bin.jar, portal_url/++resource++java/poi-3.8-20120326.jar, portal_url/++resource++java/forms-1.3.0.jar', width:1024, height:700};
  var parameters = {jnlp_href:'portal_url/++resource++java/gestioneoneri.jnlp', nomeUtente:user, integrato:'true', portalUrl:portalURL, comune:comune, percorsoFileCalcoloOneri:'/++resource++java/', nomeFileCalcoloOneri:'calcoloOneri.xls', numPreinoltro:numPreinoltro, numPratica:numPratica, classifica:classifica, numFascicolo:numFascicolo, annoFascicolo:annoFascicolo};
  var version = '1.6';
  deployJava.runApplet(attributes, parameters, version);
</script>
<noscript>
Niente plugin java!
</noscript>

Plone のドキュメントから読んだように、++resource++ 構文により、CMS は xml レジストリに登録されている静的リソースを取得できます。それを plone .pt ファイルに使用しても問題はありません。

それで、すべて読んだ後、私は自分のブラウザに向かい、次のように書きます。

http://xx.xx.xx.xx:xxxx/scia2/++resource++java/calcoloOneri.xls

Chrome は calcoloOneri.xls ファイルをダウンロードするので、「私は正しい方向に進んでいるに違いない」と思います。

これらの値をアプレットに渡すと、問題が発生します。まず、このアプレットを実行するサイトを複数持つことができるため、その Web サイトのアドレスをパラメーター (portalUrl) として取得します。Excel ファイルの場所を取得するために、ポータルの URL に ++resource++java/calcoloOneri.xls を追加します。これは、ブラウザーではこのアドレスが正しいためです。

私の copyFile メソッドでは、次のオブジェクトを使用して Excel テンプレートを新しいテンプレートにコピーします。

File f1 = new File(srFile); //srFile is "http://xx.xx.xx.xx:xxxx/scia2/++resource++java/calcoloOneri.xls"
File f2 = new File(dtFile);
InputStream in = new FileInputStream(f1);
OutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[1024];
int len;
while((len = in.read(buf)) > 0)
{
   out.write(buf, 0, len);
}
in.close();
out.close();

java.io.File がこの種の URL を処理できないことや、アプレット コードで URL または URI オブジェクトを使用してそのファイルへのポインタを取得できないことを肌で経験しました。

テンプレートをアプレットに読み込むための正しい文字列を取得するにはどうすればよいですか? 私は何が欠けていますか?

ありがとうございました

4

1 に答える 1

2

Excel ドキュメントを変更するための xlwt ライブラリを使用して、Python ですべてを実行する方がよい場合があります。次に、単純な Web フォームにすることができます。Excel テンプレートはファイル コンテンツ タイプ オブジェクトである可能性があるため、リモート呼び出しを行う代わりに、そこからファイル データを段階的に抽出するだけです。

それ以外の場合は、Excel テンプレート ファイルへのパスをハード コードすることもできます。

URL からファイルをダウンロードする場合は、Google 検索が役に立ちます: http://cookbooks.adobe.com/post_Download_a_file_from_a_URL_in_Java-17947.html

どのように解決しても、ユーザーが送信した値をインターネットからダウンロードすることを受け入れることは危険な場合があるため、実装には注意してください。

于 2013-02-27T23:32:04.747 に答える