PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Imprimir desde Android por bluetooth
Imprimir desde Android por bluetooth
Iniciado por JAVIER / Javier, abr., 15 2014 5:17 AM - 26 respostas
Membro registado
12 mensagems
Publicado em abril, 15 2014 - 5:17 AM
Alguien ha impreso desde Android por bluetooth? como lo han hecho?
Membro registado
12 mensagems
Publicado em abril, 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();
}
}
});
}
}
Publicado em maio, 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.
Publicado em outubro, 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.
Publicado em outubro, 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();
}
}
Membro registado
51 mensagems
Popularité : +2 (2 votes)
Publicado em outubro, 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
Publicado em outubro, 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
Publicado em julho, 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
Publicado em agosto, 11 2015 - 11:20 AM
Buen día, me puedes indicar como llamar el procedimiento.

Gracias
Publicado em setembro, 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
Publicado em março, 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
Publicado em julho, 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
Publicado em novembro, 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?
Publicado em julho, 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.
Publicado em outubro, 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?
Membro registado
795 mensagems
Popularité : +40 (42 votes)
Publicado em outubro, 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
Publicado em outubro, 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.
Publicado em outubro, 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)
Publicado em outubro, 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)
Publicado em novembro, 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!
Publicado em novembro, 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)
Publicado em novembro, 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.
Publicado em novembro, 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,
Publicado em novembro, 06 2018 - 5:20 PM
Hola, si está, yo lo tengo desde la version 18
Publicado em junho, 09 2020 - 2:41 PM
Sé que este post es muy antiguo y quizás la gente ya no este tan puesta en las impresoras portátiles.

Me comprado la impresora portátil Canon Zoemini Pv-123 en Amazon a través de una oferta que encontré en esta página https://objetosportatiles.com y por desgracia no he sido capaz de configurar la impresión por bluetooth.

He leído las instrucciones y me ha sido imposible.

¿Alguien la ha utilizado y sabe cómo hacerlo?

Muchas Gracias
Publicado em maio, 30 2022 - 8:11 PM
Es lo mas facil... si aun tienes dudas de como hacerlo preguntame y te paso un ejemplo solo se toma como 3 lineas de codigo
Publicado em março, 05 2023 - 7:47 PM
francisco wrote:
> Es lo mas facil... si aun tienes dudas de como hacerlo preguntame y te paso un ejemplo solo se toma como 3 lineas de codigo


Tengo el detalle en windev mobile 27.

Ya me deja imprimir en impresora bluetooth texto.
Pero quiero imprimir una imagen. Y sólo logro enviar muchos garabatos.
Tienen una idea de cómo mandar a imprimir una imagen .