簡體   English   中英

在Linux上使用Java CIFS客戶端庫發送文件

[英]Send file with Java CIFS Client Library on Linux

我試圖將包含打印數據(來自Zebra打印機的數據)的文件從Linux機器發送到Windows機器上的共享打印機,但是它不起作用,我嘗試了所有操作。 我的最后一個想法是首先嘗試在Linux機器上通過命令行工作,然后在Java中執行相同的解決方案,結果是:它通過命令行工作,但在Java中不工作。

我在Linux上的命令行解決方案包括:

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

smbclient的解決方案可以完美工作,因此我考慮過在Java中使用jCIFS ,但在打印機中不起作用。 在同一主機的共享文件夾中,它可以工作,但在打印機共享中,則不行,但是通過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錯誤:

在此處輸入圖片說明

我對操作系統毫不關心,能夠在@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);
        }
    }
}

命令變量是發給Zebra打印機(GC420t)的EPL命令,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM