3

fax4j ライブラリ ( http://fax4j.sourceforge.net ) を使用して Java でプログラムでファックスを送信しようとしていますが、残念ながら送信できません。

javadoc で提供されているサンプル コードを使用して試してみて、ライブラリの感触をつかむために修正しました。

このコードはWORKSのように、プログラムは例外をスローせずに実行を完了しますが、実際にはファックスを送信しません。これは私が達成しようとしていることです。

package com.myclasses;

import java.io.*;
import java.util.Properties;

import org.fax4j.FaxClient;
import org.fax4j.FaxClientFactory;
import org.fax4j.FaxJobStatus;
import org.fax4j.FaxJob;
import org.fax4j.FaxJob.FaxJobPriority;

public class MyTestClass
{
    public static void main(String[] args)
    throws InterruptedException, IOException
    {
        File file = new File("Drive:\\Directory\\MyFile.pdf");
        System.out.println("File Opened");

        FaxClient faxClient = FaxClientFactory.createFaxClient();
        System.out.println("Client created");

        System.out.println(faxClient.getProvider().getName());
        System.out.println(faxClient.getProvider().getDescription());

        FaxJob faxJob = faxClient.createFaxJob();
        System.out.println("Job Created");

        faxJob.setFile(file);
        System.out.println("file added");

        faxJob.setPriority(FaxJobPriority.HIGH_PRIORITY);
        System.out.println("priority set");

        faxJob.setTargetAddress(recipient);
        System.out.println("recipient set");

        faxClient.submitFaxJob(faxJob);
        System.out.println("Fax Job Sumbitted: " + faxJob.getID());


        while (faxClient.getFaxJobStatus(faxJob) == FaxJobStatus.PENDING)
        {
            System.out.println("STATUS: "
                + faxClient.getFaxJobStatus(faxJob).toString());

            for (int i = 0; i < 100; i++)
            {
                Thread.sleep(100);
                System.out.print(".");
            }
        }

        System.out.println("STATUS: "
            + faxClient.getFaxJobStatus(faxJob).toString());

    }
}

ポイントをマークするためにコンソールに出力を提供することを除いて、サンプル コードとほとんど同じです。

最後にループを追加して、ジョブのステータスを定期的にチェックし、ジョブが「保留中」でなくなるまでプログラムを実行し続けます。それが起こらないので、私が得るのは無限ループです。

Javadoc は非常に完全ではありますが、何を探しているのか正確にわからないため、少しわかりにくく、読み進めるのが困難です。オンラインでチュートリアルが見つからなかったので、どんな助けでも大歓迎です。

あるいは、fax4j を使ったファックス送信アプリを誰かが知っていて、そのソースが利用可能である場合 (たとえそれが単なる相談であっても)、それがどのように適切に使用されているかを見ることができたので、それは驚くべきことです。


編集

私が最初に質問を書いたとき、振り返ってみると重要かもしれない詳細を追加するのを忘れていました。

命令が実行されると、faxClient.sumbitFaxJob(faxJob)Adobe Reader が開かれますが、ファイルは読み込まれません。しかし、Adobe Reader のファイル履歴を見ると、おそらくそこにあることが%HOMEDIR%\AppData\Local\Temp\long-randomly-generated-name.pdfわかります (Adobe Reader で完全なディレクトリを取得できず、リロードしようとするとファイルが存在しません)。

同様に、ソース ファイルを非 pdf に変更すると、Java 内で%HOMEDIR%\AppData\Local\Temp呼び出された null ファイルに関する例外が発生し`fax4j_random-suite-of-digit.vbsます。

Exception in thread "main" org.fax4j.FaxException: Error while invoking VBS script, error found at line 145: faxJobID=faxDocumentInstance.Send,  script output:
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

[fax4j-vbs][DEBUG] Sending fax

Script error:
C:\Users\8809898B\AppData\Local\Temp\fax4j_1590168650663566246.vbs(145, 1) (null): Données non valides. 


at org.fax4j.spi.vbs.VBSFaxClientSpi.invokeScript(VBSFaxClientSpi.java:722)
at org.fax4j.spi.vbs.VBSFaxClientSpi.submitFaxJobImpl(VBSFaxClientSpi.java:416)
at org.fax4j.spi.AbstractFaxClientSpi.submitFaxJob(AbstractFaxClientSpi.java:204)
at org.fax4j.spi.adapter.AdapterFaxClientSpi.submitFaxJobImpl(AdapterFaxClientSpi.java:505)
at org.fax4j.spi.AbstractFaxClientSpi.submitFaxJob(AbstractFaxClientSpi.java:204)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.fax4j.spi.AbstractFaxClientSpiProxy.invoke(AbstractFaxClientSpiProxy.java:202)
at $Proxy0.submitFaxJob(Unknown Source)
at org.fax4j.FaxClient.submitFaxJob(FaxClient.java:211)
at com.myclasses.MyTestClass.main(MyTestClass.java:43)
4

1 に答える 1

0

Windows を使用しているようですので、Windows SPI を使用することをお勧めします。基本的には、fax4j.dll と fax4j.exe がネイティブ パス (java.library.path または Windows PATH で設定) にあることを確認する必要があります。

また、アクロバットは印刷に関しては良いサードパーティではなく、多くの問題があります. 公式の fax4j フォーラムにアクセスすると、より優れた印刷をサポートする他の PDF リーダーへの推奨事項が表示されます。アクロバットではうまくいきません。

于 2013-06-18T05:31:23.530 に答える