gpt4 book ai didi

java - fax4j : cannot send fax 的意外结果

转载 作者:行者123 更新时间:2023-12-03 23:14:21 26 4
gpt4 key购买 nike

我正在尝试使用 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 Reader 打开但没有加载任何文件。但是查看 Adob​​e Reader 中的文件历史记录,我知道它可能位于 %HOMEDIR%\AppData\Local\Temp\long-randomly-generated-name.pdf (无法获取Adobe Reader 的完整目录和文件在我尝试重新加载时不存在)。

类似地,当我将源文件更改为非 pdf 文件时,我在 Java 中遇到一个异常,关于 %HOMEDIR%\AppData\Local\Temp 处的空文件名为 `fax4j_random -数字组.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)

最佳答案

我看到您使用 Windows,所以我建议使用 Windows SPI。基本上你只需要确保 fax4j.dll 和 fax4j.exe 在 native 路径上(通过 java.library.path 或 windows PATH 设置)

在打印方面,acrobat 也不是一个好的第三方,并且有很多问题。转到官方 fax4j 论坛,您会看到对其他支持更好打印的 pdf 阅读器的推荐。使用 Acrobat 时效果不佳。

关于java - fax4j : cannot send fax 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16561163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com