我正试图使用fax4j库(http://fax4j.sourceforge.net)以编程方式发送一份带有java的传真,但不幸的是,我无法这样做。
我使用了javadoc中提供的示例代码来尝试它,最后修改它以尝试获得库的感觉。
这段代码的工作原理是,程序不抛出任何异常就完成了它的执行,但是它并没有真正发送传真,这就是我想要实现的。
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,但没有加载文件。但是看看Adobe中的文件历史,我知道它可能位于%HOMEDIR%\AppData\Local\Temp\long-randomly-generated-name.pdf中(无法获得Adobe的完整目录,而且当我试图重新加载它时文件是不存在的)。
类似地,当我将源文件更改为非pdf时,在%HOMEDIR%\AppData\Local\Temp中有一个名为`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)发布于 2013-06-18 05:31:23
我看到你在用窗户,所以我建议你使用windows SPI。基本上,您只需确保fax4j.dll和fax4j.exe位于本机路径(通过java.library.path或windows路径设置)。
此外,杂技并不是一个好的第三方,当涉及到印刷和有许多问题。去官方的fax4j论坛,你会看到推荐给其他支持更好打印的pdf阅读器。有杂技就不行了。
https://stackoverflow.com/questions/16561163
复制相似问题