Cuando vemos los sistemas de terminales punto de venta, una característica que los hace que sean rápidos es la impresión automática del tiquet o comprobante de pago, el usuario no tiene que seleccionar que desea imprimir el documento, solo indicar que se hace el cobro y el tiquet sale al mismo tiempo que se presenta en pantalla, ahora la situación es como hacerlo en un sistema con php y que crea documentos con la librería fpdf.
Los códigos que a continuación se describen están incluidos en la sección scripts de la pagina oficial de fpdf y diseñados por Johannes Güntert, así que comencemos con esta primera parte del código:
Lo que tenemos en la imagen es una extensión del típico objeto fpdf que usamos para crear los reportes, en este caso el objeto extendido se llama PDF_Javascript y que corresponde a la linea marcada con el punto 2, basicamente estamos haciendo uso de la plataforma cruzada llamada Adobe Javascript, a través de la cual adobe nos facilita la inserción de códigos javascript dentro de un documento u objeto adobe.
Para poder crear este objeto hacemos uso de la instrucción «requiere» para vincular que se hará uso de la librería de fpdf, linea que tenemos marcado con el punto 1.
A continuación se crea el método IncludeJS marcado con el punto 3 que recibe un script que almacenada en el atributo Javascript.
En el punto 4 observamos el método putjavascript que es el que se encarga de escribir el codigo almacenado dentro del atributo javascript , usando el método out para escribir el código a través de la declaracion de objeto embebido, propia de adobe javascript.
En el punto 5 el método putrecourses se encarga de verificar la existencia de código javascript en el pdf, asl no encontrarlo llamara a putjavascript para que inserte el código.
Finalmente en el punto 6 tenemos al método putcatalog que verifica si el atributo javascript esta vacío y en caso de estarlo agrega la linea inicial del código javascript dentro del pdf.
Este objeto puede ser copiado tal y como esta para ser usado en la impresión de nuestro comprobante o tiquet, así que pasemos a ver como lo usaríamos.
Aqui vemos el ejemplo que nos pone el autor, en el podemos ver encerrado en rojo, que para realizar el efecto que queremos debemos incluir el pdf_js.php atraves de la instrucción requiere, y que corresponde al nombre con el que se guardo el código anterior, después creamos una clase llamada PDF_AUTOPRINT, que es la que hará el efecto de impresión automática, ya que el código que vimos primero solo agregar código javascript dentro del PDF.
En esta nueva clase se crean dos métodos, uno para impresión en impresora local y otro para impresora en red, llamados AUTOPRINT y AUTOPRINTTOPRINTER respectivamente, dentro de estos podemos ver que se agregan los códigos javascript en las variables script que serán enviadas al método includejs.
Dicho parte del codigo de igual forma puede ser copia tal cual dentro de nuestro código de impresión, ahora si comenzaremos con la creación de nuestro documento, y la comenzamos con $pdf=newPDF_AutoPrint(); en vez del clasico $pdf=new FPDF(); esto para que el pdf que creemos lo haga con los códigos jlavascript que estamos creando, las demás lineas corresponderían a la creación de nuestro tiquet y una vez terminado y iriamos a la penultima linea en la que llamamos al metodo autoprint y le pasamos el valor de true, esto lo que hará es que una vez que se llame a Output para crear el documento y darle salida se habrá el cuadro de dialogo de imprimir, ahora si en lugar de true le pasamos el valor false, el documento sera enviado a la impresora predeterminada sin abrir el cuadro de dialogo de imprimir.
Bueno hasta aquí este ejemplo y pueden revisar muchos mas en la sección scripts del FPDF.ORG
Hola, muy buen articulo, estoy desarrollando una aplicacion web, en la que tengo esta funcion para que me imprima automaticamente, aunque realmente lo unico automatico es que me muestra el cuadro de dialogo, pero con una opcion que tienen chrome por medio de la cual se abre la aplicacion como una aplicacion nativa, ellos la llaman kiosk, logre que si imprimiera automaticamente en la impresora, pero tengo un problema y viendo los comentarios descubri que no solamente a mi me pasa y es que deseo que se cierre la ventana del navegador apenas se cree el pdf (Teniendo en cuenta la funcion de kiosk que comente, se imprime apenas se crea el pdf) decias que con echo «windows.close();» despues de out pero nada, no lo hace, no se si sepan de una manera de hacerlos, les estaria gratamente agradecido. la parte del codigo donde tengo el windows.close es
$pdf->AutoPrint(false);
$pdf->Output();
echo «window.close();»;
Me gustaMe gusta
Trataremos de hacer unas pruebas, pero usualmente estos códigos funcionan mejor con Firefox
Me gustaMe gusta
Estimado te saludo nuevamente y espero que me puedas ayudar, tengo dos problemas, el primero es que estoy tratando de imprimir una tabla con datos sacados de mysql por el método de autoprint pero me envía el siguiente error: (Fatal error: Call to undefined method PDF_AutoPrint::Table() ), y lo otro, tu sabes como puedo redireccionar el pdf a otra pagina o volver a atras despues de que se imprimira?, he intentado con window.location. header y no me funciona, espero que me puedas ayudar ya que llevo dias intentado identificar los problemas y donde soy principiante no me doy cuenta. Saludos
Me gustaMe gusta
Buenas tardes, dejanos revisar como hacemos lo que nos solicitas, ya que es un código que aunque usamos, tiene tiempo que no hacemos uso de el
Me gustaMe gusta
muchas gracias estimado, estaré atento. Saludos
Me gustaMe gusta
al incluir el codigo fpdf.php en la carpeta me da el error, continua dando el error:
Warning: FPDF::include(C:\Apache\htdocs\impresion/font/helvetica .php) [function.FPDF-include]: failed to open stream: No such file or directory in C:\Apache\htdocs\impresion\fpdf.php on line 1145
Warning: FPDF::include() [function.include]: Failed opening ‘C:\Apache\htdocs\impresion/font/helvetica .php’ for inclusion (include_path=’.;C:\php5\pear’) in C:\Apache\htdocs\impresion\fpdf.php on line 1145
Me gustaMe gusta
por las direcciones que te da, pareciera que estas tratando de ejecutar la pagina sin acceder al servidor o sin tener activo el servidor
Me gustaMe gusta
El servicio esta activo (corro otras aplicaciones web sin problemas):
Warning: FPDF::include(helvetica.php) [fpdf.include]: failed to open stream: No such file or directory in C:\AppServ\www\fpdfjs\fpdf.php on line 1145
Warning: FPDF::include() [function.include]: Failed opening ‘helvetica.php’ for inclusion (include_path=’.;C:\php5\pear’) in C:\AppServ\www\fpdfjs\fpdf.php on line 1145
FPDF error: Could not include font definition file
Me gustaMe gusta
La carpeta font con las letras PHP la tienes en donde esta el fpdf y tu reporte?
Me gustaMe gusta
Estimado, encontre muy bueno tu aporte pero me arroja estos errores, espero que me puedas ayudar, gracias.
Warning: FPDF::include(C:\Apache\htdocs\impresion/font/helvetica .php) [function.FPDF-include]: failed to open stream: No such file or directory in C:\Apache\htdocs\impresion\fpdf.php on line 1145
Warning: FPDF::include() [function.include]: Failed opening ‘C:\Apache\htdocs\impresion/font/helvetica .php’ for inclusion (include_path=’.;C:\php5\pear’) in C:\Apache\htdocs\impresion\fpdf.php on line 1145
FPDF error: Could not include font definition file
Me gustaMe gusta
El error que nos indicas se debe a que no colocaste la librería fpdf en donde esta el PHP que hará uso de ella
Me gustaMe gusta
muchas gracias por tu tiempo y tu respuesta estimado, no me quiero abusar de tu tiempo ni de tus conocimiento y me pregunto si te puedo molestar en otro momento por si es que tengo alguna duda.
Saludos
Me gustaMe gusta
claro que si, para eso estamos
Me gustaMe gusta
Disculpa no entiendo por que este error
FPDF error: Some data has already been output, can’t send PDF file
Me gustaMe gusta
Revisa que no tengas alguna instrucción echo dentro de la construcción del reporte o que no este dos ves el output
Me gustaMe gusta
hola a todos soy nuevo en el uso del fpdf ye me presento el requisito de que el pdf debe imprimirse automáticamente y me funciona de maravilla el código anterior pero en eso se me presenta un nuevo problema que después de la impresión el navegador se cierre automáticamente. Espero que me puedan ayudar con este problema saludos
Me gustaMe gusta
podrías enviarnos el código a como lo tienes, porque la verdad es algo raro que se te cierre el navegador
Me gustaMe gusta
Hola, buenas tardes. Tengo una impresora EC 5895X de EC-LINE. No puedo imprimir mi ticket con una impresora local, ya instale el pdf_js.php y no me permite la impresión mas no asi la salida a un archivo.pdf,, alguien me podria ayudar… Gracias
Me gustaMe gusta
debe ser un problema con el plugin de acrobat, no uses el que tiene por defecto el navegador
Me gustaMe gusta
Gracias por la pronta respuesta, como puedo llamar o utilizar otro…
Me gustaMe gusta
en la configuración del navegador, cual estas usando?
Me gustaMe gusta
te genera algun error? en panatalla
Me gustaMe gusta
hola buenas tardes, agradeceria si alguien pudiera colaborarme, al momento de generar el reporte con autoprint de la libreria, lo hace muy bn, me abre el dialogo de impresion y demas, lo qeu sucede es qeu al momento de darle imprimir, no se imprime nada, la hoja sale en blanco. agradezo la atencion.
Me gustaMe gusta
que impresora estas usando?
Me gustaMe gusta
impresora matriz de punto epson lx 350. acontinuacion esta elcodigo qeu utilizo en la generacion.:
IncludeJS($script);
ob_start();
//echo ‘en 4 segundos me voy a otra página’;
header(‘refresh: 10;’ . $_SERVER[‘HTTP_REFERER’]);
//header(‘refresh: 4; http://www.cristalab.com‘);
//exit;
ob_end_flush();
}
function AutoPrintToPrinter($server, $printer, $dialog=false)
{
//Print on a shared printer (requires at least Acrobat 6)
$script = «var pp = getPrintParams();»;
if($dialog)
$script .= «pp.interactive = pp.constants.interactionLevel.full;»;
else
$script .= «pp.interactive = pp.constants.interactionLevel.automatic;»;
$script .= «pp.printerName = ‘\\\\\\\\».$server.»\\\\».$printer.»‘;»;
$script .= «print(pp);»;
$this->IncludeJS($script);
}
// Cabecera de página
function Header()
{
// Logo
//$this->Image(‘logo_pb.png’,10,8,33);
// Arial bold 15
$this->SetFont(‘Helvetica’,’B’,13 );
// Movernos a la derecha
$this->Cell(80);
// Título
}
}
$pdf=new PDF_AutoPrint();
$configuracion = new Config();
$configuracionpsg = new ConfigPostgreSQL();
// Creación del objeto de la clase heredada
$nombre_tercero = strtoupper($_POST[‘NombreTerceroEgresos’]);
$data_terceros = strtoupper($_POST[‘IdentificacionTerceroEgresos’]);
$fecha_actual = strtoupper($_POST[‘FechaActual’]);
$fecha_impresion = strtoupper($_POST[‘FechaImpresion’]);
//$valor_numeros = strtoupper($_POST[‘ValorNumerosEgresos’]);
$nombre_concepto = strtoupper($_POST[‘NombreConceptoEgresos’]);
$detalle_ingreso = strtoupper($_POST[‘DetalleEgresos’]);
$numero_comprobante = $_POST[‘NumeroSerialEgresos’];
/*$codigo_colocador = strtoupper($_POST[‘IdCodigoColocadorIngresos1’]);
$nombre_colocador = strtoupper($_POST[‘NombreColocadorIngresos1′]);*/
$pdf->AliasNbPages();
$pdf->AddPage(»,’letter’);
//$pdf->SetMargins(0, 0, 0, 0);
$pdf->SetFont(‘Helvetica’,’B’,13);
$pdf->Ln(2);
for($i=1;$iCell(0,0,»,1,0);
$pdf->Ln(2);
$pdf->Cell(120,5,’Comprobante de Egresos No. ‘.$numero_comprobante,0,0);
$pdf->SetFont(‘Helvetica’,’B’,13);
$pdf->Cell(0,5,»,0,1);
$pdf->Cell(0,5,’Ciudad y Fecha : ‘.$fecha_actual,0,1);
$pdf->Cell(0,5,’Fecha y hora de impresion : ‘.$fecha_impresion,0,1);
$pdf->Ln(2);
for($i=1;$iCell(0,0,»,1,0);
$pdf->Ln(2);
$pdf->Cell(130,5,’Paguese a : ‘.$nombre_tercero,0,0);
$pdf->Cell(0,5,’C.C. / Nit : ‘.$data_terceros,0,1);
$suma_formato = number_format($_POST[‘valorfactura’]);
/*$n = new numerosALetras ($suma) ;
$valor_letras = $n->resultado;*/
$num=1234;
$totalDebe=0;
$totalHabe=0;
$V = new EnLetras();
$valor_letras = $V->ValorEnLetras($_POST[‘valorfactura’],»pesos»);
$pdf->Cell(0,5,’La suma de : ‘.strtoupper($valor_letras).»M/CTE»,0,1);
$pdf->Cell(0,5,’Valor en numeros : $ ‘.$suma_formato,0,1);
$pdf->Ln(1);
for($i=1;$iCell(0,0,»,1,0);
$pdf->Ln(1);
$pdf->Cell(0,5,’Concepto : ‘.$_POST[‘IdConceptoEgresos’].» – «.$nombre_concepto,0,1);
$pdf->Cell(0,5,’Detalle : ‘.$detalle_ingreso,0,1);
$pdf->Ln(1);
for($i=1;$iCell(0,0,»,1,0);
$pdf->Ln(2);
$pdf->SetFont(‘Helvetica’,’B’,13);
$pdf->Cell(0,4,’CONTABILIZACION ‘,0,1,’C’);
$pdf->Cell(30,4,’** Cuenta **’,0,0);
$pdf->Cell(100,4,’Detalle’,0,0);
$pdf->Cell(30,4,’Debito’,0,0);
$pdf->Cell(30,4,’Credito’,0,1);
$pdf->SetFont(‘Helvetica’,’B’,13);
$configuracion->OpenCon();
$tipo_doc = $configuracion->consulta_general(«*»);
foreach ($tipo_doc as $tipo):
$tipodoc = $tipo->IdTipoDocumentoTercero;
$tipoter = $tipo->IdTipoTercero;
$tiporeg = $tipo->IdTipoRegimenTercero;
$estCont = $tipo->ContribuyenteTercero;
$estAuto = $tipo->AutoretenedorTercero;
endforeach;
$IdCaja = $configuracion->consulta_general(«*»);
foreach ($IdCaja as $id):
$idcaja1 = $id->IdCajaUsuario;
endforeach;
$Sucursal = $configuracion->consulta_general(«*»);
foreach ($Sucursal as $sucu):
$idsucursal = $sucu->SucursalCaja;
endforeach;
$configuracion->CloseCon();
$concepto = $_POST[‘IdConceptoEgresos’];
$FormaPago = $_POST[‘formas_pago’];
$conn_string = $configuracionpsg->OpenConPostgreSql();
if($estCont == 1 || $estAuto == 1){
$Crete = $this->configuracionpsg->consulta_general(«*»);
foreach ($Crete as $rete):
$idrete = $rete->cecre;
$iva1= $rete->ceiva;
$iva2= split(‘[.]’, $iva1);
endforeach;
$gasto = $this->configuracionpsg->consulta_general(«*»);
foreach ($gasto as $g):
$cuenta = «$g->incta $g->insuf $g->insub $g->incop»;
$nombrecuenta= $g->ctnom;
if($g->inafe == ‘0’){
$totalDebe+=$_POST[‘ValorEgresos’];
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($_POST[‘ValorEgresos’]),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($g->inafe == 1){
$totalHabe+=$_POST[‘ValorEgresos’];
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($_POST[‘ValorEgresos’]),0,1);
}
endforeach;
$ivaplicable = $this->configuracionpsg->consulta_general(«*»);
foreach ($ivaplicable as $iva):
$cuenta = «$iva->incta $iva->insuf $iva->insub»;
$nombrecuenta= $iva->ctnom;
$montof=($_POST[‘ValorEgresos’] * 0.16);
if($iva->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($iva->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
$pago = $this->configuracionpsg->consulta_general(«*»);
foreach ($pago as $p):
$cuenta = «$p->incta $p->insuf $p->insub»;
$nombrecuenta= $p->ctnom;
$resultado = $totalDebe – $totalHabe;
if($p->inafe == ‘0’){
$totalDebe+=$resultado;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($resultado),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($p->inafe == 1){
$totalHabe+=$resultado;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($resultado),0,1);
}
endforeach;
}else if($tiporeg == 1){
if($tipoter == 1){ //cambiando nombres y valores de captura
$gasto = $this->configuracionpsg->consulta_general(«*»);
foreach ($gasto as $g):
$cuenta = «$g->incta $g->insuf $g->insub»;
$nombrecuenta= $g->ctnom;
if($g->inafe == ‘0’){
$totalDebe+=$_POST[‘ValorEgresos’];
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($_POST[‘ValorEgresos’]),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($g->inafe == 1){
$totalHabe+=$_POST[‘ValorEgresos’];
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($_POST[‘ValorEgresos’]),0,1);
}
endforeach;
$Crete = $this->configuracionpsg->consulta_general(«*»);
foreach ($Crete as $rete):
$idrete = $rete->cecre;
$iva1= $rete->ceiva;
$iva2= split(‘[.]’, $iva1);
endforeach;
$ivaplicable = $this->configuracionpsg->consulta_general(«*»);
foreach ($ivaplicable as $iva):
$porcentajeiva = $this->configuracionpsg->consulta_general(«*»);
foreach ($porcentajeiva as $porc):
$porciva = $porc->ivpor;
endforeach;
$cuenta = «$iva->incta $iva->insuf $iva->insub»;
$nombrecuenta= $iva->ctnom;
$montof=($monto * $porciva)/100;
if($iva->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($iva->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
$reteiva = $this->configuracionpsg->consulta_general(«*»);
foreach ($reteiva as $reti):
$cuenta = «$reti->incta $reti->insuf $reti->insub»;
$nombrecuenta= $reti->ctnom;
$montof=$montof * 0.15;
if($iva->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($iva->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
$porcentaje = $this->configuracionpsg->consulta_general(«*»);
foreach ($porcentaje as $por):
$porcent = $por->crpor;
$base = $por->crbas;
if($monto > $base){
//return «$monto > $base —$porcent «;
$montof=($monto * $porcent)/100;
$retencion = $this->configuracionpsg->consulta_general(«*»);
foreach ($retencion as $rets):
$cuenta = «$rets->incta $rets->insuf $rets->insub»;
$nombrecuenta= $rets->ctnom;
if($iva->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($iva->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
}
endforeach;
$pago = $this->configuracionpsg->consulta_general(«*»);
foreach ($pago as $p):
$cuenta = «$p->incta $p->insuf $p->insub»;
$nombrecuenta= $p->ctnom;
$resultado = $totalDebe-$totalHabe;
if($p->inafe == ‘0’){
$totalDebe+=$resultado;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($resultado),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($p->inafe == 1){
$totalHabe+=$resultado;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($resultado),0,1);
}
endforeach;
}
if($tipoter == 2){
$gasto = $this->configuracionpsg->consulta_general(«*»);
foreach ($gasto as $g):
$cuenta = «$g->incta $g->insuf $g->insub»;
$nombrecuenta= $g->ctnom;
if($g->inafe == ‘0’){
$totalDebe+=$_POST[‘ValorEgresos’];
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($_POST[‘ValorEgresos’]),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($g->inafe == 1){
$totalHabe+=$_POST[‘ValorEgresos’];
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($_POST[‘ValorEgresos’]),0,1);
}
endforeach;
$Crete = $this->configuracionpsg->consulta_general(«*»);
foreach ($Crete as $rete):
$idrete = $rete->cecre;
$iva1= $rete->ceiva;
$iva2= split(‘[.]’, $iva1);
endforeach;
if($_POST[‘IdConceptoEgresos’] != ‘003’){
$porcentaje = $configuracionpsg->consulta_general(«*»);
foreach ($porcentaje as $por):
$porcent = $por->crpor;
$base = $por->crbas;
if($_POST[‘ValorEgresos’] > $base){
$montof=($_POST[‘ValorEgresos’] * $porcent)/100;
$retencion = $configuracionpsg->consulta_general(«*»);
foreach ($retencion as $rets):
$cuenta = «$rets->incta $rets->insuf $rets->insub»;
$nombrecuenta= $rets->ctnom;
if($rets->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($rets->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
}
endforeach;
}else{
$porcentaje = $configuracionpsg->consulta_general(«*»);
foreach ($porcentaje as $por):
$porcent = $por->crpor;
$base = $por->crbas;
if($_POST[‘ValorEgresos’] > $base){
$montof=($_POST[‘ValorEgresos’] * $porcent)/100;
$retencion = $configuracionpsg->consulta_general(«*»);
foreach ($retencion as $rets):
$cuenta = «$rets->incta $rets->insuf $rets->insub»;
$nombrecuenta= $rets->ctnom;
if($rets->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($rets->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
}
endforeach;
}
$ivaplicable = $configuracionpsg->consulta_general(«*»);
foreach ($ivaplicable as $iva):
$cuenta = «$iva->incta $iva->insuf $iva->insub»;
$nombrecuenta= $iva->ctnom;
$montof=($_POST[‘ValorEgresos’] * 0.16);
if($iva->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($iva->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
$reteiva = $configuracionpsg->consulta_general(«*»);
foreach ($reteiva as $reti):
$cuenta = «$reti->incta $reti->insuf $reti->insub»;
$nombrecuenta= $reti->ctnom;
$montof=$montof * 0.15;
if($reti->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($reti->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
$pago = $configuracionpsg->consulta_general(«*»);
foreach ($pago as $p):
$cuenta = «$p->incta $p->insuf $p->insub»;
$nombrecuenta= $p->ctnom;
$resultado = $totalDebe-$totalHabe;
if($p->inafe == ‘0’){
$totalDebe+=$resultado;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($resultado),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($p->inafe == 1){
$totalHabe+=$resultado;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($resultado),0,1);
}
endforeach;
}
}else if($tiporeg == 2){
if($tipoter == 1){
$gasto = $configuracionpsg->consulta_general(«*»);
foreach ($gasto as $g):
$cuenta = «$g->incta $g->insuf $g->insub»;
$nombrecuenta= $g->ctnom;
if($g->inafe == ‘0’){
$totalDebe+=$_POST[‘ValorEgresos’];
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($_POST[‘ValorEgresos’]),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($g->inafe == 1){
$totalHabe+=$_POST[‘ValorEgresos’];
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($_POST[‘ValorEgresos’]),0,1);
}
endforeach;
$Crete = $configuracionpsg->consulta_general(«*»);
foreach ($Crete as $rete):
$idrete = $rete->cecre;
$iva1= $rete->ceiva;
endforeach;
$porcentaje = $configuracionpsg->consulta_general(«*»);
foreach ($porcentaje as $por):
$porcent = $por->crpor;
$base = $por->crbas;
if($_POST[‘ValorEgresos’] > $base){
$montof=($_POST[‘ValorEgresos’] * $porcent)/100;
$retencion = $configuracionpsg->consulta_general(«*»);
foreach ($retencion as $rets):
$cuenta = «$rets->incta $rets->insuf $rets->insub»;
$nombrecuenta= $rets->ctnom;
if($rets->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($rets->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
$reteiva = $configuracionpsg->consulta_general(«*»);
foreach ($reteiva as $reti):
$cuenta = «$reti->incta $reti->insuf $reti->insub»;
$nombrecuenta= $reti->ctnom;
$montof=($_POST[‘ValorEgresos’] * 0.16)*0.15;
if($reti->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($reti->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
$ivadescontable = $configuracionpsg->consulta_general(«*»);
foreach ($ivadescontable as $ivad):
$cuenta = «$ivad->incta $ivad->insuf $ivad->insub»;
$nombrecuenta= $ivad->ctnom;
if($ivad->inafe == ‘0’){
$totalDebe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($montof),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($ivad->inafe == 1){
$totalHabe+=$montof;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($montof),0,1);
}
endforeach;
}
endforeach;
$pago = $configuracionpsg->consulta_general(«*»);
foreach ($pago as $p):
$cuenta = «$p->incta $p->insuf $p->insub»;
$nombrecuenta= $p->ctnom;
$resultado = $totalDebe – $totalHabe;
if($p->inafe == ‘0’){
$totalDebe+=$resultado;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,number_format($resultado),0,0);
$pdf->Cell(30,5,»,0,1);
}
if($p->inafe == 1){
$totalHabe+=$resultado;
$pdf->Cell(30,5,$cuenta,0,0);
$pdf->Cell(100,5,$nombrecuenta,0,0);
$pdf->Cell(30,5,»,0,0);
$pdf->Cell(30,5,number_format($resultado),0,1);
}
endforeach;
}
}
$configuracionpsg->CloseConPostgreSql($conn_string);
$pdf->SetFont(‘Helvetica’,’B’,13);
$pdf->Cell(130,4,’Total Comprobante….’,0,0);
$pdf->SetFont(‘Helvetica’,’B’,13);
$pdf->Cell(30,4,’$ ‘.number_format($totalDebe),0,0);
$pdf->Cell(30,4,’$ ‘.number_format($totalHabe),0,1);
$pdf->SetFont(‘Helvetica’,’B’,13);
$pdf->Cell(40,12,’Elaborado’,1,0,’C’);
$pdf->Cell(40,12,’Revisado’,1,0,’C’);
$pdf->Cell(40,12,’Aprobado’,1,0,’C’);
$pdf->Cell(70,12,’Recibi’,1,0,’C’);
/*$variable_serial = $numero_comprobante + 1; // incremento el numero del comprobante
$configuracion->OpenCon(); // inicio una nueva coneccion
// consulto a que caja es la asignada para el usuario autenticado
$query_caja = $configuracion->consulta_general(«IdCajaUsuario», «SAUsuario», «», «NombreUsuario = ‘».$_SESSION[‘user_name_auth’].»‘»);
foreach ($query_caja as $data_caja):
$id_caja = $data_caja->IdCajaUsuario;
endforeach;
$configuracion->update(«SACaja», «RangoIniEgresoCaja = ‘».$variable_serial.»‘», «IdCaja = ‘».$id_caja.»‘»);*/
$pdf->AutoPrint(true);
$pdf->Output();
?>
gracias por la pronta respuesta
Me gustaMe gusta
el uso de headers al inicio del código puede ser el problema, no puedes tener salidas HTML Y salidas pdf al mismo tiempo.
Me gustaMe gusta
hola buenos dias, el header del comienzo del codigo lo utilizo para redireccionar despues de 10 segundos de la visualizacion del pdf a la pagina donde fue generado, ya no me esta generando problemas, la impresion ya no sale en blanco, el problema qeu tengo ahora, es qeu no me toma la configuracion, es decir la impresion sale mas grande qeu la hoja, y la letra sale muy diferente. agradeceria si pueden ayudarme con esto buen dia
Me gustaMe gusta
tienes la carpeta con las fuentes que usa el fpdf en la misma carpeta donde esta tu pagina?
Me gustaMe gusta
buenos dias si claro en la carpeta de la libreria en font, shi tengo las fuentes qeu agregue, es que cuando descargo el pdf y lo envio a imprimir sale bn el problema radica es cuando lo envio desd la visualizacion del navegador, para firefox hay algun otro visualizador?? diferente al de acrobat?
Me gustaMe gusta
ve a la configuración de firefox y ahí hay una pestaña con los programas predeterminados para cada extensión, en ella ubicas los PDF y si dice que los va a abrir con el visualizados de firefox, cambiado a que lo muestre con Adobe acrobat
Me gustaMe gusta
hola byuenas trdes veo qeu el foro es algo antiguo espero qeu aun lo revisen, tengo un problema con la impresion , estoy utilizando el autoprint de la libreria fpdf, me general el archivo abre la ventana, pero le doy imprimir, y al momento de empezara imprimir no lo hace, pasa la pagina en blanco agradeceria si me pudieran colaborara exitos
Me gustaMe gusta
el problema debe estar en la forma como escribes los datos al construir el PDF, pero necesitaríamos ver el código para ver que ocurre.
Me gustaMe gusta
hola buenos dias!! tengo un problema, tal vez podrian ayudarmr gracias: cuando paso false, el dialogo de impresion igualmente se abre, agradeceria si me dijeran qeu hago mal pues entiendo que no deberia abrirce el dialogo.
Me gustaMe gusta
en algunos casos es la versión del acrobat reader, en las nuevas versiones por seguridad aunque no habrá el dialogo, te manda un aviso pidiendo permiso para mandar a imprimir
Me gustaMe gusta
y Sabes como configurarlo para que no muestre el dialogo? de antemano gracias por tu respuesta
Me gustaMe gusta
Fatal error: Call to undefined method FPDF::AutoPrint()
Me aparece esto
Me gustaMe gusta
ya ya vi mi error
Me gustaMe gusta
ya se quito el error anterior ahora me dice que ah ocurrido un error al cargar el pdf y no hace nada
Me gustaMe gusta
revisa que las librerias del FPDF y del componente que se modifica en este ejercicio esten en la misma carpeta junto con el PHP que usas para contruir el PDF, ahora bien, veo que usas el Internet Information Server, recuerda que este por defecto no soporta PHP y debes instalarselo.
Me gustaMe gusta
Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\tic\pdf_js.php:53) in C:\AppServ\www\tic\pdf\fpdf.php on line 533
Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\tic\pdf_js.php:53) in C:\AppServ\www\tic\pdf\fpdf.php on line 534
Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\tic\pdf_js.php:53) in C:\AppServ\www\tic\pdf\fpdf.php on line 535
2 0 obj <> endobj 3 0 obj <> stream 2.834646 0 0 2.834646 0 841.9 cm 2 J 0.2 w BT /F1 4.23 Tf ET BT 90 -50 Td (Print me!) Tj ET
Me gustaMe gusta
Que tal, me funcionó hasta la parte que genera el pdf, lo visualiza en el navegador, y manda automáticamente el cuadro de dialogo de impresión, Pero entiendo que al usar pdf->AutoPrint( false ) debería mandarse a imprimir sin visualizar nada, y eso no logro hacerlo funcionar. Que podrà ser?
Me gustaMe gusta
al usar autoprint con el valor false, el PDF si se vera en pantalla, pero el cuadro de dialogo de imprimir no aparecerá, ahora bien, al parecer en alguna actualización del plug-in de acrobat reader, se ha añadido una medida se seguridad que no se puede saltar, que hace que hace que aparezca una ventana que nos pide confirmación para mandar a imprimir, pero que no es el cuadro de dialogo convencional, solo es una venta de advertencia con los botones de aceptar y cancelar
Me gustaMe gusta
Muy bueno funciona solo que quiero hacer algo y nose como 😦 aqui me explico:
De esta manera llamo al PDF_AutoPrint
window.open(direccion+’../../ImprimirDirect.php’);
Se abre otra pestaña en el navegador donde me muestra la ventana de impresion y a la vez el pdf.
Lo que quiero esque una vez que se presione imprimir o cancelar en la ventana de impresion se cierre automaticamente la pestaña donde se genero el pdf.
Le agradeceria de antemano por su colaboracion.
Saludos =)
Me gustaMe gusta
lo que puedes hacer es que una vez que termines de crear tu PDF, mandes a ejecutar un javascript con la instrucción echo, algo asi como como echo(» window.close() «);
Me gustaMe gusta
Muchas gracias pero no se en que parte del codigo puedo ejecutar el script 😦 y lo que estoy haciendo es esto:
$pdf=new PDF_AutoPrint();
$pdf->AliasNbPages();
$pdf->SetAutoPageBreak(true,7);
$pdf->SetMargins(5,5,5);
$pdf->SetLineWidth(.3);
$pdf->SetDrawColor(0,0,0);
$pdf->AliasNbPages();
$pdf->AutoPrint(true);
$pdf->Output();
echo(«window.close()»);
Y cuando hago esto no llega a ejecutarse el script solo llega hasta $pdf->Output();
Y probe de esta otra manera:
$pdf=new PDF_AutoPrint();
$pdf->AliasNbPages();
$pdf->SetAutoPageBreak(true,7);
$pdf->SetMargins(5,5,5);
$pdf->SetLineWidth(.3);
$pdf->SetDrawColor(0,0,0);
$pdf->AliasNbPages();
$pdf->AutoPrint(true);
echo(«window.close()»);
$pdf->Output();
Y me sale este error: window.close()FPDF error: Some data has already been output, can’t send PDF file 😦
Me gustaMe gusta
debe ir después del output y en el echo debes de encerrar el window.close dentro de etiquetas script, para que el navegador lo reconozca y lo pueda ejecutar
Me gustaMe gusta
Muchas gracias pero aun no me funciona 😦 lo hice asi:
$pdf=new PDF_AutoPrint();
$pdf->AliasNbPages();
$pdf->SetAutoPageBreak(true,7);
$pdf->SetMargins(5,5,5);
$pdf->SetLineWidth(.3);
$pdf->SetDrawColor(0,0,0);
$pdf->AliasNbPages();
$pdf->AutoPrint(true);
$pdf->Output();
echo(«window.close();»);
Al parecer el $pdf->Output(); es como el return de java y ya no se ejecuta las lineas de abajo 😦 Ayuda 😦
Me gustaMe gusta
veo que en el echo no estas colocando las etiquetas ….. , de esa forma el navegador no entiende que se trata de PHP manadando a ejecutar codigo de javascript
Me gustaMe gusta
No se ve pero el window.close() ya esta con las etiquetas script
Me gustaMe gusta
esta asi » echo(«window.close();»); «
Me gustaMe gusta
No se visualiza las etiquetas 😦 pero el echo(«window.close();»); ya esta con las etiquetas script 😦 lo siento 😦
Me gustaMe gusta
la solución mas simple a tu situación que veo de momento seria que en lugar de abrir el PHP con window.open, mandaras a abrir un HTML en el cual tengas un iframe que cargue tu PHP, eso te permitira que puedas ejecutar codigo javascript en el evento onload de tu pagina y el plugin de Adobe solo se ejecute en el iframe, el cierre lo puedes programar con un setTimeOut de medio segundo, el cuadro de dialogo de la impresion evitara que la ventana que el javascript que cierra la ventana se ejecute dandote el efecto de que se cierra al darle imprimir o cancelar
Me gustaMe gusta
Si también yo quiero que se cierre la ventana del navegador después de imprimir pero no lo consigo, ¿puedes ayudarme por favor?
Muchas gracias.
Me gustaMe gusta
podrias usar window.close(), pero si usas IE deberas configurarlo para que siempre ejecute Javascript sin preguntar, ya que esta acción la mayoria de los navegadores la toman como sospechosa y lanzan una advertencia al respecto
Me gustaMe gusta
Buenas tardes,
Este script funciona muy bien. Pero sabéis la manera de que una vez se imprime, se pueda cerrar la ventana. Lo he probado de mil formas y no hay manera….
Agradecería mucho un poco de información.
saludos desde Catalunya
Me gustaMe gusta
bueno,no estoy seguro de haber entendido tu pregunta pero si lo que deseas es que después de imprimir se cierre la venta del navegador, puedes recurrir a javascript usando window.close, o si deseas que te mande a otra pagina puedes usar el atributo window.location para cambiar la dirección del navegador. Espero que te sea de ayuda, avisanos si podemos ayudarte con algo mas y nos encanta tu tierra, saludos desde México
Me gustaMe gusta