Anchal Radhwani
Anchal Radhwani

Reputation: 148

In android, how to print without printer plugins

In android, can we add printer plugins inside application memory or there jar file inside asset folder, and try to call it from application, to create mobile printing.

As I find

> Print Share Application option only. Any other way without Google cloud or any cloud printing.

Upvotes: 1

Views: 1708

Answers (2)

Anchal Radhwani
Anchal Radhwani

Reputation: 148

This is working for me,I am passing pdf file to printer it is printing!!

class WifiPrint extends Activity { TextView printer_name, gate_way, printer_port; int port = 9100; WifiManager wifi = null; android.net.DhcpInfo d; String gateway_ip = "";

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wifi_print); wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); printer_name = (TextView) findViewById(R.id.textView1); gate_way = (TextView) findViewById(R.id.textView2); printer_port = (TextView) findViewById(R.id.textView3); /* de.lohndirekt.print.IppPrintService svc = new IppPrintService(printerURI); InputStream stream = new BufferedInputStream(new FileInputStream("image.epl")); DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; Doc myDoc = new SimpleDoc(stream, flavor, null); DocPrintJob job = svc.createPrintJob(); job.print(myDoc, null);*/

}

@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.wifi_print, menu); return true; }

public void wifisettings(View v) { startActivityForResult(new Intent( android.provider.Settings.ACTION_WIFI_SETTINGS), 0); }

public void connectSocket(View v) {
/*Uri filepath=Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.pdfsample); Toast.makeText(this, filepath.getPath(), Toast.LENGTH_LONG).show(); */ ClientThread clientThread = new ClientThread(""); Thread clientstartThread = new Thread(clientThread); clientstartThread.start(); }

public String intToIp(int i) { return ((i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "." + ((i >> 24) & 0xFF)); }

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub

  super.onActivityResult(requestCode, resultCode, data);      if

(requestCode == 0) { WifiInfo wifiinfo = wifi.getConnectionInfo(); d = wifi.getDhcpInfo();

      printer_name.setText("Name:" + wifiinfo.getSSID());             gateway_ip =

intToIp(d.gateway); gate_way.setText("Printer Ip:" + gateway_ip); printer_port.setText("Port:" + port);

  }   }

public File createFileFromInputStream(InputStream inputStream) {

 try{
    File f = new File("/sdcard/testpdf.pdf");
    OutputStream outputStream = new FileOutputStream(f);
    byte buffer[] = new byte[1024];
    int length = 0;

    while((length=inputStream.read(buffer)) > 0) {
      outputStream.write(buffer,0,length);
    }

    outputStream.close();
    inputStream.close();

    return f;
 }catch (IOException e) {
       //Logging exception
 }

 return null;     }

class ClientThread implements Runnable { String filepath = ""; BufferedInputStream bis = null; FileInputStream fis;

  Socket socket;

  public ClientThread(String filename) {          filepath = filename;        }

  @Override       public void run() {             // TODO Auto-generated method

stub try {
InputStream in = getResources().openRawResource(R.raw.pdfsample); createFileFromInputStream(in); File pdfFile = new File("/sdcard/testpdf.pdf"); byte[] mybytearray = new byte[(int) pdfFile.length()]; socket = new Socket(gateway_ip, port); runOnUiThread(new Runnable() {
@Override public void run() { // TODO Auto-generated method stub if(socket.isConnected()){ Toast.makeText(WifiPrint.this, "Socket Connected", Toast.LENGTH_LONG).show();
}
} });
fis = new FileInputStream(pdfFile); bis = new BufferedInputStream(fis); bis.read(mybytearray, 0, mybytearray.length); OutputStream os = socket.getOutputStream(); os.write(mybytearray, 0, mybytearray.length); os.flush();

          if (bis != null) {
              bis.close();
              os.close();
              socket.close();
              fis.close();

          }
              } catch (final UnknownHostException e) {
          // TODO Auto-generated catch block
          runOnUiThread(new Runnable() {

              @Override
              public void run() {
                  // TODO Auto-generated method stub
                  Toast.makeText(WifiPrint.this,
                          "UnHost Exceptions" + e.getMessage(),
                          Toast.LENGTH_LONG).show();

              }
          });             } catch (final IOException e) {
          // TODO Auto-generated catch block
          runOnUiThread(new Runnable() {

              @Override
              public void run() {
                  // TODO Auto-generated method stub
                  Toast.makeText(WifiPrint.this,
                          "Io Exceptions" + e.getMessage(),
                          Toast.LENGTH_LONG).show();

              }
          });             } finally {
          try {
              if (bis != null) {
                  bis.close();
                  socket.close();
                  fis.close();
              }
          } catch (final IOException e) {
              // TODO Auto-generated catch block
              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      // TODO Auto-generated method stub
                      Toast.makeText(
                              WifiPrint.this,
                              "Io Exeption in Closing Socket"
                                      + e.getMessage(), Toast.LENGTH_LONG)
                              .show();
                  }
              });
          }           }       }

}

}

In manifest file : just add:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-feature android:name="android.hardware.wifi" />

Upvotes: 1

user4952596
user4952596

Reputation:

Yes!!!

In Android 4.4 (API level 19) and higher, the framework provides services for printing images and documents directly from Android applications.

/**
 * To print image / photo
 */
private void printPhoto() {
    // Get a PrintHelper instance
    PrintHelper photoPrinter = new PrintHelper(this);
    photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);
    // get image from mipmap folder
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
    // provide job name (which will be displayed in the print queue) and bitmap
    photoPrinter.printBitmap("droids.jpg - test print", bitmap);
}

Reference for print html and custom document

Upvotes: 0

Related Questions