简体   繁体   English

使用 JPS(java 打印服务)在特定打印机上打印文档

[英]Print a doc on specific printer using JPS( java print service)

I want to print a document from a specific printer(standard Alone Program).我想从特定的打印机(标准的单独程序)打印文档。

Input: IP address, printer name(Using Jdk 1.6)输入:IP 地址、打印机名称(使用 Jdk 1.6)

I have followed the below URL我遵循了以下网址

Print to specific printer (IPP URI) in Java 在 Java 中打印到特定打印机 (IPP URI)

But I did not find IppPrintService class in jdk1.6.但是在jdk1.6中没有找到IppPrintService类。

Could you please help me out, how to implement this using jdk1.6?你能帮我解决一下,如何使用 jdk1.6 实现这个?

IppPrintService is part of the library jspi . IppPrintService是库jspi 的一部分。

If you just want to submit a printable document like PDF via IPP to a printer (or to CUPS) this code provides a minimalistic implementation without dependencies.如果您只想通过 IPP 向打印机(或 CUPS)提交可打印的文档(如 PDF),此代码提供了一个没有依赖项的简约实现。

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class IppPrintJob {

  public static void main(String args[]) throws Exception {
    URI printerURI = URI.create("http://colorjet:631/ipp/printer");
    File file = new File("A4-blank.pdf");
    short status = new IppPrintJob().printDocument(printerURI, new FileInputStream(file));
    System.out.println(String.format("ipp status: %04X", status));
  }

  void writeAttribute(DataOutputStream dataOutputStream, int tag, String name, String value)
  throws IOException
  {
    Charset charset = StandardCharsets.UTF_8;
    dataOutputStream.writeByte(tag);
    dataOutputStream.writeShort(name.length());
    dataOutputStream.write(name.getBytes(charset));
    dataOutputStream.writeShort(value.length());
    dataOutputStream.write(value.getBytes(charset));
  }

  short printDocument(URI uri, InputStream documentInputStream) throws IOException {
    HttpURLConnection httpURLConnection = (HttpURLConnection) uri.toURL().openConnection();
    httpURLConnection.setDoOutput(true);
    httpURLConnection.setRequestProperty("Content-Type", "application/ipp");
    OutputStream outputStream = httpURLConnection.getOutputStream();
    DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream());
    dataOutputStream.writeShort(0x0101); // ipp version
    dataOutputStream.writeShort(0x0002); // print job operation
    dataOutputStream.writeInt(0x002A); // request id
    dataOutputStream.writeByte(0x01); // operation group tag
    writeAttribute(dataOutputStream, 0x47, "attributes-charset", "utf-8");
    writeAttribute(dataOutputStream, 0x48, "attributes-natural-language", "en");
    writeAttribute(dataOutputStream, 0x45, "printer-uri", uri.toString());
    dataOutputStream.writeByte(0x03); // end tag
    documentInputStream.transferTo(outputStream);
    dataOutputStream.close();
    if (httpURLConnection.getResponseCode() == 200) {
      DataInputStream dataInputStream = new DataInputStream(httpURLConnection.getInputStream());
      System.out.println(
        String.format("ipp version %d.%s", dataInputStream.readByte(), dataInputStream.readByte())
      );
      return dataInputStream.readShort();
    } else {
      throw new IOException(String.format(
          "post to %s failed with http status %d", uri, httpURLConnection.getResponseCode()
      ));
    }
  }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM