PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 28 → Imprimir desde Android por bluetooth
Imprimir desde Android por bluetooth
Débuté par JAVIER / Javier, 15 avr. 2014 05:17 - 26 réponses
Membre enregistré
12 messages
Posté le 15 avril 2014 - 05:17
Alguien ha impreso desde Android por bluetooth? como lo han hecho?
Membre enregistré
12 messages
Posté le 16 avril 2014 - 06:12
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();
}
}
});
}
}
Posté le 27 mai 2014 - 05:46
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.
Posté le 02 octobre 2014 - 18:44
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.
Posté le 02 octobre 2014 - 22:24
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();
}
}
Membre enregistré
51 messages
Popularité : +2 (2 votes)
Posté le 03 octobre 2014 - 09:39
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
Posté le 03 octobre 2014 - 11:29
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
Posté le 05 juillet 2015 - 14:46
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
Posté le 11 août 2015 - 11:20
Buen día, me puedes indicar como llamar el procedimiento.

Gracias
Posté le 24 septembre 2015 - 19:28
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
Posté le 29 mars 2016 - 15:45
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
Posté le 04 juillet 2016 - 20:48
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
Posté le 18 novembre 2016 - 19:02
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?
Posté le 20 juillet 2017 - 09:54
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.
Posté le 19 octobre 2018 - 00:06
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?
Membre enregistré
794 messages
Popularité : +40 (42 votes)
Posté le 19 octobre 2018 - 19:48
Quizas tengas la respuesta en los siguientes ejemplos

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

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

Un saludo

Rubén
Posté le 31 octobre 2018 - 15:34
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.
Posté le 31 octobre 2018 - 16:28
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)
Posté le 31 octobre 2018 - 16:29
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)
Posté le 03 novembre 2018 - 00:00
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!
Posté le 04 novembre 2018 - 17:55
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)
Posté le 04 novembre 2018 - 17:59
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.
Posté le 05 novembre 2018 - 21:57
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,
Posté le 06 novembre 2018 - 17:20
Hola, si está, yo lo tengo desde la version 18
Posté le 09 juin 2020 - 14:41
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
Posté le 30 mai 2022 - 20:11
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
Posté le 05 mars 2023 - 19:47
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 .