PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 23 → Imprimir desde Android por bluetooth
Imprimir desde Android por bluetooth
Started by JAVIER / Javier, Apr., 15 2014 5:17 AM - 23 replies
Registered member
12 messages
Posted on April, 15 2014 - 5:17 AM
Alguien ha impreso desde Android por bluetooth? como lo han hecho?
Registered member
12 messages
Posted on April, 16 2014 - 6:12 AM
con la impresora portátil me vino un cd con un programa demo y el sdk, el programa en java es el siguiente, como lo puedo integrar en una aplicación windev mobile?

/*
* Copyright (C) 2011 Beijing REGO tech ltd.
* mobile printer library
* auther
* wpeng@rgprt.com
*
* website
* www.rgprt.com
*
* date
* 2011/3/16
*/

package rego.PrintTest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View.OnClickListener;
import rego.PrintLib.*;
import rego.PrintLib.PortOperation.btOperation;
public class PrintTestAcitvity extends Activity {

btOperation bo = new btOperation();
//// ¶ÔÆ뷽ʽ
/**
* printing text align left
*/
public static final int AT_LEFT = 0;
/**
* printing text align center
*/
public static final int AT_CENTER = 1;
/**
* printing text align right
*/
public static final int AT_RIGHT = 2;

private Button btConnect = null;
private Button btCancel = null;
private Button asciiSend = null;
private Button graphicSend = null;
private regoPrinter mobileprint = null;
private boolean bConnect = true;
private TextView textTitle = null;
private EditText portName;
private int iObjectCode;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


btConnect = (Button)findViewById(R.id.connect);
btCancel = (Button)findViewById(R.id.cancel);
asciiSend = (Button)findViewById(R.id.asc_send);
graphicSend = (Button)findViewById(R.id.gra_send);
textTitle = (TextView)findViewById(R.id.title);
portName = (EditText)findViewById(R.id.portName);

iObjectCode = 0;
mobileprint = new regoPrinter();
asciiSend.setEnabled(false);
graphicSend.setEnabled(false);

btConnect.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

String strName = portName.getText().toString();
if(strName.length() == 0)
{
Toast.makeText(PrintTestAcitvity.this, "Error:port name empty", Toast.LENGTH_SHORT).show();
return;
}

if(bConnect)
{
try
{
mobileprint.CON_LnitPrintLib();

iObjectCode = mobileprint.CON_ConnectDevice(strName);
}
catch(printLibException e)
{
Toast.makeText(PrintTestAcitvity.this, e.GetMessage(),
Toast.LENGTH_LONG).show();
}
finally
{
if(iObjectCode != 0)
{
// connect succeed
textTitle.setText(strName + PrintTestAcitvity.this.getString(R.string.consucceed));
btConnect.setText(R.string.disconnect);
bConnect = false;
asciiSend.setEnabled(true);
graphicSend.setEnabled(true);
}
}
}
else
{
textTitle.setText(strName + PrintTestAcitvity.this.getString(R.string.disconnect));
asciiSend.setEnabled(false);
graphicSend.setEnabled(false);
try {
mobileprint.CON_CloseConnect(iObjectCode);
} catch (printLibException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bConnect = true;
btConnect.setText(R.string.connect);
}
}
});

btCancel.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(!bConnect)
{
try {
mobileprint.CON_CloseConnect(iObjectCode);
} catch (printLibException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

mobileprint.CON_FreePrintLib();
finish();
return;
}
});

asciiSend.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
// mobileprint.CON_PageStart(iObjectCode, 576, 0) &&
if(mobileprint.ASCII_QueryPrinterStatus(iObjectCode))
{
//Çå³ý´òÓ¡»ú»º³å
mobileprint.ASCII_Reset(iObjectCode);

//´òÓ¡LogoͼƬ£¬ÏȽ«Í¼Æ¬ÏÂÔØÖÁ´òÓ¡»úÖÐÔÙÖ´Ðд˺¯Êý
//mobileprint.PrintFlashPic(1, 0);

//´òÓ¡title
mobileprint.ASCII_AlignType(iObjectCode, AT_CENTER);
mobileprint.ASCII_FormatString(iObjectCode,false,false,true,false,false);
mobileprint.ASCII_SendString(iObjectCode, "±£ÏÕÀíÅâµ¥", "gb2312");
mobileprint.ASCII_FeedLines(iObjectCode, 20);
mobileprint.ASCII_Reset(iObjectCode);

//´òÓ¡ÄÚÈÝ
mobileprint.ASCII_SetLineSpace(iObjectCode, 20);//ÉèÖÃÐмä¾à
mobileprint.ASCII_FormatString(iObjectCode,false,false,true,false,false);
mobileprint.ASCII_SendString(iObjectCode, "±¨°¸ºÅ£º ", "gb2312");
mobileprint.ASCII_FormatString(iObjectCode,false,false,false,false,false);
mobileprint.ASCII_SendString(iObjectCode, "90202011335665433532", "gb2312");
mobileprint.ASCII_PrintCRLF(iObjectCode, 1);

mobileprint.ASCII_FormatString(iObjectCode,false,false,true,false,false);
mobileprint.ASCII_SendString(iObjectCode, "³µÅƺŠ: ", "gb2312");
mobileprint.ASCII_FormatString(iObjectCode,false,false,false,false,false);
mobileprint.ASCII_SendString(iObjectCode, "¾©A12133", "gb2312");
mobileprint.ASCII_PrintCRLF(iObjectCode, 1);

mobileprint.ASCII_FormatString(iObjectCode,false,false,true,false,false);
mobileprint.ASCII_SendString(iObjectCode, "±£ÏÕÈËÐÕÃû : ", "gb2312");
mobileprint.ASCII_FormatString(iObjectCode,false,false,false,false,false);
mobileprint.ASCII_SendString(iObjectCode, "YN-KF56", "gb2312");
mobileprint.ASCII_PrintCRLF(iObjectCode, 1);

mobileprint.ASCII_FormatString(iObjectCode,false,false,true,false,false);
mobileprint.ASCII_SendString(iObjectCode, "±¾È˳ÐŵÒò ______________________________________________ ", "gb2312");
mobileprint.ASCII_PrintCRLF(iObjectCode, 2);
mobileprint.ASCII_SendString(iObjectCode, "(ÊÂÓÉ)·ÅÆú´ËʹʵÄÒ»ÇÐÅ⳥Ȩ", "gb2312");

mobileprint.ASCII_AlignType(iObjectCode, AT_RIGHT);
mobileprint.ASCII_SendString(iObjectCode, "Äê ÔÂ ÈÕ", "gb2312");
mobileprint.ASCII_PrintCRLF(iObjectCode, 2);

mobileprint.ASCII_Reset(iObjectCode);

mobileprint.CON_PageEnd(iObjectCode);
}
else
{
Toast.makeText(PrintTestAcitvity.this, "Printer status error",
Toast.LENGTH_LONG).show();
}
} catch (printLibException e) {
// TODO Auto-generated catch block
Toast.makeText(PrintTestAcitvity.this, e.GetMessage(),
Toast.LENGTH_LONG).show();
}
}
});

graphicSend.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
if(mobileprint.CON_PageStart(iObjectCode, 576, 450) && mobileprint.ASCII_QueryPrinterStatus(iObjectCode))
{
//Çå³ý´òÓ¡»ú»º³å
mobileprint.ASCII_Reset(iObjectCode);

mobileprint.DRAW_Line(iObjectCode,0, 1, 575, 1,3);
mobileprint.DRAW_Line(iObjectCode,0, 1, 0, 450,3);
mobileprint.DRAW_Line(iObjectCode,575, 1, 575, 450,3);
mobileprint.DRAW_Line(iObjectCode,0, 450, 575, 450,3);
mobileprint.DRAW_Line(iObjectCode,465, 1, 465, 450,1);
mobileprint.DRAW_Rectangle(iObjectCode, 0, 0, 80, 50, 1, true);
mobileprint.DRAW_Text(iObjectCode, 30, 80, "ÉϺ£¿ì½Ý¿ìÔËÓÐÏÞ¹«Ë¾ ", 40);
mobileprint.DRAW_Text(iObjectCode,90, 185, "ÉϺ£ -> ±±¾©", 35);
mobileprint.DRAW_Text(iObjectCode,80, 245, "(ÉϺ£±±Ç๫·°ì)", 20);
mobileprint.DRAW_Text(iObjectCode,310, 245, "(»ðʮ·վ)", 20);
mobileprint.DRAW_Text(iObjectCode,20, 305, "20112-02100100-0101-2112-10", 30);
mobileprint.DRAW_Code128(iObjectCode, 60, 350, 1, 60, "754432112-2");
mobileprint.DRAW_CreateRotalBlock(iObjectCode,476, 0, 450,100, 2);//(0.0) Ϊ×óÉϽǵľØÐÎ
mobileprint.DRAW_Code128(iObjectCode, 40, 5, 1, 60, "754432112-2");


mobileprint.CON_PageEnd(iObjectCode);
}
else
{
Toast.makeText(PrintTestAcitvity.this, "Printer status error",
Toast.LENGTH_LONG).show();
}
} catch (printLibException e) {
// TODO Auto-generated catch block
Toast.makeText(PrintTestAcitvity.this, e.GetMessage(),
Toast.LENGTH_LONG).show();
}
}
});
}
}
Posted on May, 27 2014 - 5:46 AM
Nadie lo ha hecho??? eso es lo que no me ha gustado de Windev, no hay documentación, soporte ni donde consultar las cosas que en otras herramientas las encuentras.
Posted on October, 02 2014 - 6:44 PM
Tengo el mismo problema, lo conseguiste?
Opino igual que tu, es herramienta muy potente pero nada de nada de documentación y cuando preguntas algo la gente no ayuda, yo vengo de Velneo y si algo bueno tiene es su foro.
Espero que esto cambie y tengamos una buena comunidad.
Saludos.
Posted on October, 02 2014 - 10:24 PM
Te cuento que por fin lo logré.

Creas un procedimiento en java como el que te pongo a continuación.

en esta linea: impresora = callWLProcedure_String("imp1"); llama a un procedimiento en windev y lo que hace es seleccionar poner el nombre de la impresora ( si quieres lo puedes poner directo )

en esta linea: String msg = callWLProcedure_String("imp_texto"); llama a un procedimiento donde armas es texto a imprimir y le das un Result texto_a_imprimir (tambien podrias ponerlo directo)
y listo, cualquier cosa me preguntas.

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Button;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;

public static void imprime_factura()
{
// android built in classes for bluetooth operations
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;

OutputStream mmOutputStream;
InputStream mmInputStream;
Thread workerThread;

byte[] readBuffer;
int readBufferPosition;
int counter;
String impresora;
impresora = "";

try {
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter
.getBondedDevices();
if (pairedDevices.size() > 0) {
impresora = callWLProcedure_String("imp1");
for (BluetoothDevice device : pairedDevices) {

if (device.getName().equals(impresora)) {
mmDevice = device ;
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mmOutputStream = mmSocket.getOutputStream();
mmInputStream = mmSocket.getInputStream();
String msg = callWLProcedure_String("imp_texto");
msg += "\n";

mmOutputStream.write(msg.getBytes());
mmOutputStream.close();
mmInputStream.close();
mmSocket.close();
break;
}
}
}
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
Registered member
51 messages
Popularité : +1 (1 vote)
Posted on October, 03 2014 - 9:39 AM
Hola Javier,

Sí, tienes razón. Lamentablemente no hay una comunidad grande de Windev - España.

Nosotros somos ditribuidores de Pcsoft para España.
Antes teníamos una comunidad más amplia, teníamos un foro en nuestra web, pero debido a ciertas circunstancias graves se dejo y crackearon el foro. La persona que lo creo estuvo 1 año prácticamente sin movimiento.

Estamos intentado recuperar esa comunidad poco a poco. Cuando actualicemos nuestra web crearemos también un foro.
Hace un par de días creamos un grupo en Facebook de Windev, todavía no hay movimiento. Poco a poco esperamos que sea una gran grupo donde la gente pueda opinar, consultar..etc: https://www.facebook.com/groups/463317133806320/

En las siguientes direcciones de Youtube puedes consultar vídeo tutoriales en español, aunque de momento son solo de Windev:



También indicarte que disponemos de los manuales de las tres herramientas traducidos al español, por si te pudiera interesar.

Espero que aunque poca, esta información te sirva de ayuda.

--
Salvador Soler.
María Soler.
Distribuidores de PcSoft en España.
www.windeveloper.es
s.soler@serival.es
Posted on October, 03 2014 - 11:29 AM
Gracias Javier por tu comentario,
Menuda la que hay que montar, lo pruebo y te cuento.

Hola Salvador, tomo nota y espero con ansia ese foro que anuncias, seria muy bueno para todos.
Saludos a todos los windeveros
Posted on July, 05 2015 - 2:46 PM
Bueb dia
Veo el ejemplo que tiene para la impresion desde windev mobile para android
Estoy tratando de hacer que mi aplicacion imprima por bluetoot pero no lo he
Logrado tengo el sdk que viene en mi impresora y funciona bien desde eclipse


Quien puede orientarme como hacerlo desde windev
Posted on August, 11 2015 - 11:20 AM
Buen día, me puedes indicar como llamar el procedimiento.

Gracias
Posted on September, 24 2015 - 7:28 PM
Buenas tardes,
Hernan te contesto tarde y supongo que lo tendrás solucionado, si no es así te explico, el procedimiento tienes que pasarlo a Java y eso lo haces pulsando en la cabecera que pone WL y cambiará a Java.
Introduces el código Java que nos proporciono nuestro compañero Javier que funciona perfectamente (GRACIAS X EL APORTE!! te debo una :merci: ) y sigue sus instrucciones.
No tiene complicación si tienes alguna duda pregunta
Un saludo
Posted on March, 29 2016 - 3:45 PM
Por sky hay un foro en latinoamerica y es muy movido. lo creo Thierry Planchais de TAD STUDIO http://www.tap-studio.com/

Cordial saludo,

Orlando Guzman
Posted on July, 04 2016 - 8:48 PM
Buen día amigo, un súper aporte. Solo que aun me da error en las librerías. Cuales fueron las que añadiste? Estamos iniciando con WinDev Mobile y lo único que eh podido lograr es a través de sokets escribir directamente en la impresora. El inconveniente es que no puedes añadir imágenes.

Te agradecería mucho tu ayuda

Saludos
Posted on November, 18 2016 - 7:02 PM
sabe alguno como imprimir NEGRITA en el papel? actualmente logro imprimir gracias al codigo puesto en el foro pero como logramos realzar algunos textos? como puedo hacer que imprima algunas letras mas grandes que otras?
Posted on July, 20 2017 - 9:54 AM
Acabo de incorporarme a la plataforma Windev y tengo este mismo problema con esta misma impresora, soy novísimo en esto (años en otras plataformas)

¿ Como puedo incluir las librerías en la ruta?
¿Alguien tendría un código sencillo?

He conseguido conectar con la impresora mediante bluetooth, abrir socket, incluso enviar información, pero ni se entera, por lo que supongo que necesitaré usar su propio SDK.
Saludos.
Posted on October, 19 2018 - 12:06 AM
Tu codigo me funciona, pero solo en Android 4.1.2 en Motorola TC55, pero cuando quiero correr el apk donde esta la rutina en un Samsumg J2 prime por ejemplo, solo emite la conectvidad del bluethoo pero no sale la impresión (impresoras zebras iMZ320 y ZQ320). Alguien sabe que debo de modificar para que imprima en un smartphone?
Registered member
150 messages
Posted on October, 19 2018 - 7:48 PM
Quizas tengas la respuesta en los siguientes ejemplos

https://depot.pcsoft.fr/resource.awp…

https://depot.pcsoft.fr/resource.awp…

Un saludo

Rubén
Posted on October, 31 2018 - 3:34 PM
Hola Ruben, gracias por ahi no sale mucho... tengo dias batallando inclusive me pase a la version 23 de Windev y sigue sin funcionar. No entiendo que puede estar pasando.
Posted on October, 31 2018 - 4:28 PM
IF SocketConnectBluetooth(sNom,"00001101-0000-1000-8000-00805F9B34FB",host.impresoraMac)=False THEN
Error("No se ha podido conectar a impresora bluetooth "+sNombreImpresora+" "+impresoraMac,ErrorInfo(errFullDetails))
RETURN
END

SocketWrite(sNombreImpresora,gsImprimir_texto)

SocketClose(sNombreImpresora)
Posted on October, 31 2018 - 4:29 PM
IF SocketConnectBluetooth(sNom,"00001101-0000-1000-8000-00805F9B34FB",host.impresoraMac)=False THEN
Error("No se ha podido conectar a impresora bluetooth "+sNombreImpresora+" "+impresoraMac,ErrorInfo(errFullDetails))
RETURN
END

SocketWrite(sNombreImpresora,gsImprimir_texto)

SocketClose(sNombreImpresora)
Posted on November, 03 2018 - 12:00 AM
Hola Javier, gracias por responder! Disculpa que sea tan abusiva, pero podrias indicarme en qué parte del código que posteaste hace tiempos debo de incluir ese if?

Saludos!
Posted on November, 04 2018 - 5:55 PM
le puedes poner en un procedimiento y llamarlo una vez seleccionada la impresora y leido los datos de la misma pasas esos datos por parámetros al procedimiento.

sNombreImpresora es una variable con el nombre de la impresora bluetooth, impresoraMac es la dirección mac de la impresora, gsImprimir_texto es una variable con el texto a imprimir.

IF SocketConnectBluetooth(sNombreImpresora,"00001101-0000-1000-8000-00805F9B34FB",host.impresoraMac)=False THEN
Error("No se ha podido conectar a impresora bluetooth "+sNombreImpresora+" "+impresoraMac,ErrorInfo(errFullDetails))
RETURN
END

SocketWrite(sNombreImpresora,gsImprimir_texto)

SocketClose(sNombreImpresora)
Posted on November, 04 2018 - 5:59 PM
el último código que postee del If es todo el código, no tiene relación con el anterior con Java, ya con ese código puedes imprimir directo al socket bluetooth.
Posted on November, 05 2018 - 9:57 PM
Hola Javier, muchas gracias! Te comento que no tengo la version WM 23, si no la 20. Ahi creo que no esta disponible verdad?

Saludos,
Posted on November, 06 2018 - 5:20 PM
Hola, si está, yo lo tengo desde la version 18