Coder Social home page Coder Social logo

aubds / 1-printooth Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ldavidsp/printooth

0.0 0.0 0.0 249 KB

A well documented, high-level Android interface that makes printing via bluetooth printers easier

License: Mozilla Public License 2.0

Java 36.22% Kotlin 63.78%

1-printooth's Introduction

Printooth

Android Arsenal

Printooth aim is to provide a simple abstraction for use the Bluetooth printers regardless of its brand.

Add the JitPack repository to your build file

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Add dependency

dependencies {
    implementation 'com.github.mazenrashed:Printooth:${LAST_VERSION}'
}

Add permissions to manifest

<uses-permission android:name="android.permission.BLUETOOTH" />  
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Initialize Printooth

Should be initialized once in Application.onCreate():

Printooth.init(context);

Scan and pair printer

Printooth is providing a scanning activity to make pairing process easy. Just start ScanningActivity and you will skip the process of pairing and saving printer.

startActivityForResult(Intent(this, ScanningActivity::class.java), ScanningActivity.SCANNING_FOR_PRINTER)

When the printer is being ready:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {  
    super.onActivityResult(requestCode, resultCode, data)  
    if (requestCode == ScanningActivity.SCANNING_FOR_PRINTER && resultCode == Activity.RESULT_OK)  
        //Printer is ready now 
}

If you want to make your own user interface, you can pass your paired printer to Printooth like this:

Printooth.setPrinter(printerName, printerAddress)

Check if Printooth has saved printer:

Printooth.hasPairedPrinter()

To get the current saved printer:

Printooth.getPairedPrinter()

To remove the current saved printer:

Printooth.removeCurrentPrinter()

Printing

Printooth provides a simple builder to design your paper. To print Hello World simply, write this code:

var printables = ArrayList<Printable>()
var printable = TextPrintable.Builder()  
        .setText("Hello World")
printables.add(printable)
Printooth.printer().print(printables)

Use all builder functionalities:

var printables = ArrayList<Printable>()
var printable = TextPrintable.Builder()  
        .setText("Hello World") //The text you want to print
        .setAlignment(DefaultPrinter.ALLIGMENT_CENTER)
        .setEmphasizedMode(DefaultPrinter.EMPHASISED_MODE_BOLD) //Bold or normal  
        .setFontSize(DefaultPrinter.FONT_SIZE_NORMAL)
        .setUnderlined(DefaultPrinter.UNDELINED_MODE_ON) // Underline on/off
        .setCharacterCode(DefaultPrinter.CHARACTER_CODE_USA_CP437) // Character code to support languages
        .setLineSpacing(DefaultPrinter.LINE_SPACING_60)
        .setNewLinesAfter(1) // To provide n lines after sentence
        .build()
printables.add(printable)
Printooth.printer().print(printables)

Listen to your printing order state:

Printooth.printer().printingCallback = object : PrintingCallback {  
    override fun connectingWithPrinter() { } 
  
    override fun printingOrderSentSuccessfully() { }  //printer was received your printing order successfully.
  
    override fun connectionFailed(error: String) { }  
  
    override fun onError(error: String) { }  
  
    override fun onMessage(message: String) { }  
}

Use more than printer in the same time:

var printer1 = PairedPrinter(name, address)  
var printer2 = PairedPrinter(name, address)  
Printooth.printer(printer1).print(printables)  
Printooth.printer(printer2).print(printables)

If you have a printer with deferent commands

Create a class from type Printer and override the initializers method, then return your printer commands from the printers command sheet ( You can find it on the Internet ), let's take an example:

open class MyPrinter : Printer() {  
 
   override fun initLineSpacingCommand(): ByteArray = byteArrayOf(0x1B, 0x33)  
 
   override fun initInitPrinterCommand(): ByteArray = byteArrayOf(0x1b, 0x40)  
 
   override fun initJustificationCommand(): ByteArray = byteArrayOf(27, 97)  
 
   override fun initFontSizeCommand(): ByteArray = byteArrayOf(29, 33)  
 
   override fun initEmphasizedModeCommand(): ByteArray = byteArrayOf(27, 69)
 
   override fun initUnderlineModeCommand(): ByteArray = byteArrayOf(27, 45) 
 
   override fun initCharacterCodeCommand(): ByteArray = byteArrayOf(27, 116)  
 
   override fun initFeedLineCommand(): ByteArray = byteArrayOf(27, 100)  
   
   override fun initPrintingImagesHelper(): PrintingImagesHelper = DefaultPrintingImagesHelper()
}

If you have issues with printing images, you can implement the process of transfaring image from bitmap to ByteArray manuly by extends PrintingImagesHelper class and implement getBitmapAsByteArray, then you shold return an object from your helper to initPrintingImagesHelper() as this example:

class MyPrintingImagesHelper : PrintingImagesHelper {  
    override fun getBitmapAsByteArray(bitmap: Bitmap): ByteArray {  
        return convertBitmapToByteArray(bitmap)  
    }  
}
//in your printer class
open class MyPrinter : Printer() {  
    ....
    ....
    override fun initPrintingImagesHelper(): PrintingImagesHelper = MyPrintingImagesHelper()
}
//when using printooth
private val printing = Printooth.printer(MyPrinter())
...
printing.print(printables)

Then pass your printer class to Printooth:

Printooth.printer(MyPrinter()).print(printables)

Proguard config

-keep class * implements java.io.Serializable { *; }

Contributing

We welcome contributions to Printooth!

  • โ‡„ Pull requests and โ˜… Stars are always welcome.

Java examples

Thanks for @lafras-h for the nice project JavaPrintooth , it's an examples to use Printooth in java

1-printooth's People

Contributors

mazenrashed avatar tspoke avatar ldavidsp avatar yousef96m avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.