Отправить файл с помощью клиентской библиотеки Java CIFS в Linux - PullRequest
0 голосов
/ 17 октября 2018

Я попытался отправить файл с данными для печати (данные с принтера Zebra) с компьютера с Linux на общий принтер на компьютере с Windows, но это не сработало, я попробовал все.Моя последняя идея состояла в том, чтобы сначала попытаться работать с помощью командной строки на компьютере с Linux, а затем выполнить то же решение в Java, и в результате получилось следующее: оно работает в командной строке, но не в Java.

Мое решение для командной строкив Linux есть:

smbclient \\\\host\\printer_share -U 'domain/user%pass' -c "put file_name"

Решение с smbclient работает отлично, поэтому я подумал об использовании jCIFS в Java, но это делаетне работает в принтере.В общей папке того же хоста он работает, но в принтере общего ресурса нет, однако по командной строке с smbclient работает обе работы.У кого-нибудь есть идеи, где я ошибаюсь?

Мой код Java:

public static void sendFileToPrinter(String commandsToPrinter) {
    String user = "user";
    String pass = "pass";
    String domain = "domain";

    String path = "smb://host/printer_share/file_to_print";
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, user, pass);
    SmbFile smbFile = new SmbFile(path, auth);
    SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile);
    smbfos.write(commandsToPrinter.getBytes());
    System.out.println("Work");
}   

Ошибка Java:

enter image description here

1 Ответ

0 голосов
/ 05 ноября 2018

Независимо от операционной системы, я смог решить проблему с помощью @HieryNomus, у которого есть одна библиотека, идеально подходящая для реализации SMB.Ссылка Git: https://github.com/hierynomus/smbj/

Для моей цели я достиг следующей реализации (это только мой тестовый код):

public static void sendCommandToZebraPrinter(String command) throws MalformedURLException, SmbException, IOException {

    String username = "username";
    String password = "password";
    String domain = "mydomain";
    String sharedDirectory = "PRINTER_SHARE";
    String computerName = "MYCOMPUTER";

    SMBClient client = new SMBClient();

    try (Connection connection = client.connect(computerName)) {
        AuthenticationContext ac = new AuthenticationContext(username, password.toCharArray(), domain);
        Session session = connection.authenticate(ac);
        try (PrinterShare share = (PrinterShare) session.connectShare(sharedDirectory)) {
            InputStream stream = new ByteArrayInputStream(command.concat("\n").getBytes(StandardCharsets.UTF_8));
            share.print(stream);
        }
    }
}

Командная переменная - это команда EPL для принтера Zebra (GC420t), например:

I8,A,001


Q104,024
q863
rN
S2
D11
ZT
JF
OD
R172,0
f100
N
75,33,D,h3,"1"
b363,39,D,h2,"TEST"
b198,33,D,h3,"TEST"
LO154,4,1,73
LO280,4,1,73
A149,27,2,2,1,1,N,"1"
A272,26,2,3,1,1,N,"TEST"
A425,26,2,3,1,1,N,"TEST"
P1

ЕСЛИ КОМАНДА НЕ РАБОТАЕТ: Добавьте \n в конце команды.

...