printing to a networked printer using java

前端 未结 3 406
有刺的猬
有刺的猬 2021-01-07 13:01

i require to send a pdf document to print on the server side of a web app, the printer fully supports pdf printing etc, it is networked as well to the server. The pdf is als

3条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-01-07 13:31

    After reading through this Q&A I spent awhile working with the javax.print library only to discover that it is not very consistent with printer option support. I.e. even if a printer has an option like stapling, the javax.printer library showed it as "stapling not supported".

    So I then tried out PJL commands using a plain java socket and it worked great, in my tests it also printed faster than the javax.print library, it has a much smaller code footprint and best part is no libraries are needed at all:

    private static void print(File document, String printerIpAddress)
    {
        try (Socket socket = new Socket(printerIpAddress, 9100))
        {
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            String title = document.getName();
            byte[] bytes = Files.readAllBytes(document.toPath());
    
            out.write(27);
            out.write("%-12345X@PJL\n".getBytes());
            out.write(("@PJL SET JOBNAME=" + title + "\n").getBytes());
            out.write("@PJL SET DUPLEX=ON\n".getBytes());
            out.write("@PJL SET STAPLEOPTION=ONE\n".getBytes());
            out.write("@PJL ENTER LANGUAGE=PDF\n".getBytes());
            out.write(bytes);
            out.write(27);
            out.write("%-12345X".getBytes());
            out.flush();
            out.close();
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
    }
    

    See this for more info on attempts with javax.print.

提交回复
热议问题