Ищете решение для печати PDF-файла на сетевой принтер из приложения Android без PrintManager

Я ищу решение для печати файла PDF из приложения Android без отображения диалогового окна.

Я пробовал следующие два варианта.

  1. Распечатайте PDF-файл, написав собственный PdfDocumentAdapter, расширив PrintDocumentAdapter. И распечатайте PDF-файл с помощью PrintManager. Но это вызывает стандартный диалог, который показывает предварительный просмотр с дополнительными опциями для выбора бумаги / выбора принтера и сохранения файла в формате pdf и т. д.
PrintManager pm = (PrintManager)getSystemService(Context.PRINT_SERVICE);
try {
  PrintDocumentAdapter pda = new PdfDocumentAdapter(this,"/sdcard/PDFTest.pdf");
  pm.print("PDF-from-Android-App",pda, new PrintAttributes.Builder().build());

} catch (Exception e) {
  Log.d(TAG,"Error while Printing." + e.getMessage());
  e.printStackTrace();
}
  1. Пытался открыть сокет на IP-адресе принтера и стандартном порту 9100. И записал содержимое pdf-файла в выходной поток. Но при этом печатаются все ненужные символы. При таком подходе, если я предоставлю текстовый файл вместо PDF, он будет распечатан правильно.
protected void printPDF(String ipAddress, int port) {
    Socket tcpsocket = null;
    try {
        InetSocketAddress inetSocketAddress = new InetSocketAddress(InetAddress.getByName(ipAddress), port);
        tcpsocket = new Socket();
        tcpsocket.connect(inetSocketAddress, 5000 );
    } catch (Exception e) {
        Log.d(TAG,"Invlaid Port Number.");
        return;
    }
    if (tcpsocket != null) {
        try {
            InputStream input = new FileInputStream(new File("/sdcard/PDFTest.pdf"));
            OutputStream outputStream = tcpsocket.getOutputStream();
            byte[] buf = new byte[1024];
            int bytesRead;
            while ((bytesRead = input.read(buf)) > 0) {
                outputStream.write(buf, 0, bytesRead);
            }
            outputStream.flush();
            outputStream.close();
            tcpsocket.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Я ищу вариант 2 для моей реализации. Если кто-то реализовал такое решение, пожалуйста, помогите мне. Заранее спасибо.

В общем, подробности того, как разговаривать с принтером, зависят от принтера (производителя и модели). Свяжитесь с производителем, чтобы узнать, как работать с принтерами производителя, и узнать, какие существуют варианты прямого подключения.

CommonsWare 30.03.2021 01:07

Не зная, какой принтер или сервер печати работает, кому-либо трудно дать вам варианты.

Morrison Chang 30.03.2021 01:07

Я проверю данные производителя о поддерживаемых командах, но все же упомяну здесь три основных принтера и модель, с которой я пытаюсь работать. Canon C5550I III, RICOH MP 171SPF, RICOH SP 5210SF

user15256902 30.03.2021 02:41
1
3
13
0

Другие вопросы по теме