{"id":421,"date":"2026-10-12T00:24:59","date_gmt":"2026-10-12T00:24:59","guid":{"rendered":"https:\/\/posdonpedro.com\/negociosnubeIA\/generador-de-codigo-de-barras-gratis-para-etiquetas-de-precio\/"},"modified":"2026-10-12T00:25:04","modified_gmt":"2026-10-12T00:25:04","slug":"generador-codigo-de-barras","status":"publish","type":"page","link":"https:\/\/posdonpedro.com\/negociosnubeIA\/generador-codigo-de-barras\/","title":{"rendered":"Generador de c\u00f3digo de barras gratis para etiquetas de precio"},"content":{"rendered":"\n<style>\n.dpb{max-width:820px;margin:0 auto 3rem;color:#1e293b;font-family:inherit}\n.dpb *{box-sizing:border-box}\n.dpb-hero{background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 100%);color:#cbd5e1;border-radius:1.25rem;padding:2rem 1.75rem;text-align:center;margin-bottom:1.5rem}\n.dpb-hero p{margin:0;font-size:1.05rem;line-height:1.6}\n.dpb-hero strong{color:#4ade80}\n.dpb-steps{display:flex;gap:.5rem;justify-content:center;flex-wrap:wrap;margin-top:1rem}\n.dpb-steps span{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);border-radius:999px;padding:.35rem .9rem;font-size:.85rem;color:#e2e8f0}\n.dpb-card{background:#fff;border:1px solid #e2e8f0;border-radius:1.25rem;box-shadow:0 4px 24px rgba(0,0,0,.06);padding:1.5rem;margin-bottom:1.5rem}\n.dpb-card h2{font-size:1.15rem;margin:0 0 1rem;color:#0f172a}\n.dpb-row{display:flex;gap:.75rem;flex-wrap:wrap}\n.dpb-f{flex:1;min-width:150px;margin-bottom:1rem}\n.dpb-f label,.dpb-lbl{display:block;font-weight:700;font-size:.85rem;color:#0f172a;margin-bottom:.35rem}\n.dpb-f small,.dpb-hint{display:block;color:#64748b;font-size:.78rem;margin-top:.25rem;line-height:1.45}\n.dpb input,.dpb textarea,.dpb select{width:100%;padding:.65rem .8rem;border:2px solid #e2e8f0;border-radius:.65rem;font-size:1rem;color:#0f172a;background:#fff;font-family:inherit}\n.dpb input:focus,.dpb textarea:focus,.dpb select:focus{outline:none;border-color:#2563eb}\n.dpb textarea{min-height:110px;font-family:monospace;font-size:.88rem}\n.dpb-chk{display:flex;gap:.5rem 1.2rem;flex-wrap:wrap;margin-bottom:1rem}\n.dpb-chk label{display:flex;align-items:center;gap:.4rem;font-size:.92rem;cursor:pointer}\n.dpb .dpb-chk input{width:auto;margin:0}\n.dpb-items{margin-bottom:.75rem}\n.dpb-item{display:grid;grid-template-columns:1fr 120px 78px 40px;grid-template-areas:\"n p q x\" \"c c c x\" \"s s s s\";gap:.4rem;margin-bottom:.6rem;padding:.75rem;border:2px solid #e2e8f0;border-radius:1rem;background:#f8fafc}\n.dpb-c{display:block;margin:0;min-width:0}\n.dpb-c span{display:block;font-size:.72rem;font-weight:700;color:#475569;margin-bottom:.15rem}\n.dpb-c input{padding:.5rem .65rem;font-size:.95rem}\n.dpb-cn{grid-area:n}.dpb-cp{grid-area:p}.dpb-cq{grid-area:q}.dpb-cc{grid-area:c}\n.dpb-st{grid-area:s;font-size:.78rem;color:#64748b;line-height:1.4}\n.dpb-st.dpb-ok{color:#166534}.dpb-st.dpb-warn{color:#92400e}.dpb-st.dpb-bad{color:#b91c1c;font-weight:700}\n.dpb-x{grid-area:x;align-self:start;margin-top:1.1rem;border:none;background:#fee2e2;color:#b91c1c;border-radius:.6rem;cursor:pointer;font-weight:700;font-size:1rem;min-height:40px}\n.dpb-add{border:2px dashed #94a3b8;background:transparent;color:#334155;border-radius:.65rem;padding:.55rem 1rem;cursor:pointer;font-weight:600;font-size:.9rem;font-family:inherit}\n.dpb-add:hover{border-color:#2563eb;color:#2563eb}\n.dpb-tools{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1rem}\n.dpb-btn{border:none;border-radius:.75rem;padding:.75rem 1.1rem;font-weight:700;cursor:pointer;font-size:.92rem;font-family:inherit}\n.dpb-btn-dark{background:#0f172a;color:#4ade80}\n.dpb-btn-light{background:#e2e8f0;color:#0f172a}\n.dpb-btn-wa{background:#25d366;color:#fff}\n.dpb-btn-big{width:100%;font-size:1.1rem;padding:1rem;background:linear-gradient(135deg,#16a34a,#22c55e);color:#fff;box-shadow:0 6px 18px rgba(34,197,94,.35)}\n.dpb-btn[disabled]{opacity:.6;cursor:wait}\n.dpb details{border:2px solid #e2e8f0;border-radius:1rem;padding:.75rem 1rem;margin-bottom:1rem;background:#f8fafc}\n.dpb summary{cursor:pointer;font-weight:700;color:#0f172a}\n.dpb details[open] summary{margin-bottom:.75rem}\n.dpb-msg{font-size:.85rem;padding:.6rem .9rem;border-radius:.65rem;margin:.5rem 0 0;background:#f0fdf4;color:#166534;border:1px solid #bbf7d0;display:none}\n.dpb-meter{font-size:.85rem;padding:.6rem .9rem;border-radius:.65rem;margin:.25rem 0 1rem;background:#f0fdf4;color:#166534;border:1px solid #bbf7d0}\n.dpb-meter.dpb-warn{background:#fffbeb;color:#92400e;border-color:#fde68a}\n.dpb-legal{font-size:.78rem;color:#64748b;margin:.6rem 0 0;line-height:1.5}\n.dpb-err{display:none;background:#fef2f2;color:#991b1b;border:1px solid #fecaca;padding:.7rem .9rem;border-radius:.65rem;font-size:.9rem;margin-bottom:.75rem}\n.dpb-res{display:none}\n.dpb-res.dpb-show{display:block}\n.dpb-res h2{margin-top:1.5rem}\n.dpb-sum{font-size:.95rem;line-height:1.6;margin:0 0 .75rem}\n.dpb-warns{margin:0 0 .75rem;padding-left:1.1rem;color:#92400e;font-size:.85rem}\n.dpb-prev{background:#cbd5e1;border-radius:1rem;padding:10px;overflow:hidden;margin-bottom:.5rem}\n.dpb-prev-in{position:relative;overflow:hidden}\n.dpb-prev-in > div{transform-origin:0 0;position:absolute;left:0;top:0;box-shadow:0 2px 10px rgba(0,0,0,.2)}\n.dpb-res-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:.5rem;margin-top:.75rem}\n.dpb-lead{border:2px solid #22c55e;border-radius:1.25rem;padding:1.25rem;margin-top:1.5rem;background:#f0fdf4}\n.dpb-lead h3{margin:0 0 .4rem;color:#0f172a;font-size:1.1rem}\n.dpb-lead p{margin:0 0 .9rem;font-size:.92rem}\n.dpb-cta{background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 100%);border-radius:1.25rem;padding:1.75rem;color:#cbd5e1;text-align:center;margin:1.5rem 0}\n.dpb-cta h3{color:#4ade80;margin:0 0 .5rem;font-size:1.2rem}\n.dpb-cta p{margin:0 0 1rem;font-size:.95rem}\n.dpb-cta a{display:inline-block;background:#25d366;color:#fff;padding:.8rem 1.6rem;border-radius:.75rem;text-decoration:none;font-weight:700;margin:.25rem}\n.dpb-cta a.dpb-alt{background:transparent;border:2px solid #4ade80;color:#4ade80}\n#dpb-printarea{display:none}\n.dpb-sheet{background:#fff;overflow:hidden;display:grid;align-content:start;justify-content:start;box-sizing:border-box}\n.dpb-lab{display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;font-family:Arial,Helvetica,sans-serif;color:#000;text-align:center;background:#fff;box-sizing:border-box}\n.dpb-cut .dpb-lab{outline:.1mm dashed #9ca3af}\n.dpb-ln{width:100%;font-weight:700;line-height:1.15;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-break:break-word;flex:0 0 auto}\n.dpb-lp{font-weight:800;line-height:1.05;white-space:nowrap;flex:0 0 auto;letter-spacing:-.02em}\n.dpb-lb{position:relative;width:100%;flex:1 1 auto;min-height:0;margin-top:.6mm}\n.dpb-lb svg{position:absolute;left:0;top:0;width:100%;height:100%;display:block}\n.dpb-lc{font-family:'Courier New',monospace;line-height:1.1;flex:0 0 auto;letter-spacing:.2mm;white-space:nowrap}\n@media(max-width:600px){\n  .dpb-item{grid-template-columns:1fr 1fr 74px;grid-template-areas:\"n n x\" \"p p q\" \"c c c\" \"s s s\"}\n  .dpb-x{margin-top:1.1rem}\n  .dpb-card{padding:1.1rem}\n  .dpb-hero{padding:1.5rem 1.1rem}\n}\n@media print{\n  html:has(body.dpb-on){margin:0!important;padding:0!important}\n  body.dpb-on{margin:0!important;padding:0!important;background:#fff!important}\n  body.dpb-on > *:not(#dpb-printarea){display:none!important}\n  body.dpb-on > #dpb-printarea{display:block!important}\n  #dpb-printarea .dpb-sheet{break-after:page;page-break-after:always;-webkit-print-color-adjust:exact;print-color-adjust:exact}\n  #dpb-printarea .dpb-sheet:last-child{break-after:auto;page-break-after:auto}\n}\n<\/style>\n\n\n\n<div class=\"dpb\">\n\n  <div class=\"dpb-hero\">\n    <p>Haz <strong>etiquetas de precio con c\u00f3digo de barras<\/strong> para tu tienda, minimercado, ferreter\u00eda o droguer\u00eda. Escribe o pega tus productos desde Excel, elige el tama\u00f1o y <strong>impr\u00edmelas en hoja carta, A4 o rollo<\/strong>. Gratis y sin crear cuenta.<\/p>\n    <div class=\"dpb-steps\"><span>1 \u00b7 Agrega tus productos<\/span><span>2 \u00b7 Elige el tama\u00f1o<\/span><span>3 \u00b7 Imprime y pega<\/span><\/div>\n  <\/div>\n\n  <div class=\"dpb-card\">\n    <h2>Tus productos<\/h2>\n    <div class=\"dpb-tools\">\n      <button type=\"button\" class=\"dpb-btn dpb-btn-light\" id=\"dpb-example\">Cargar un ejemplo<\/button>\n      <button type=\"button\" class=\"dpb-btn dpb-btn-light\" id=\"dpb-clear\">Empezar en blanco<\/button>\n    <\/div>\n\n    <details id=\"dpb-pastebox\">\n      <summary>Pegar lista desde Excel<\/summary>\n      <label class=\"dpb-lbl\" for=\"dpb-paste\">Copia las columnas en Excel o Google Sheets y p\u00e9galas aqu\u00ed<\/label>\n      <textarea id=\"dpb-paste\" placeholder=\"Arroz blanco 500 g&#9;3200&#9;&#9;12&#10;Jab\u00f3n de barra&#9;2500&#9;7701234567890&#9;10\"><\/textarea>\n      <small class=\"dpb-hint\">Orden de las columnas: <strong>nombre<\/strong>, <strong>precio<\/strong>, <strong>c\u00f3digo<\/strong> (opcional) y <strong>cantidad de etiquetas<\/strong> (opcional). Si la primera fila son t\u00edtulos, se salta sola. Pon la columna de c\u00f3digos en formato <em>Texto<\/em> antes de copiar, para que Excel no los convierta en 7,70E+12.<\/small>\n      <div class=\"dpb-tools\" style=\"margin:.75rem 0 0\"><button type=\"button\" class=\"dpb-btn dpb-btn-dark\" id=\"dpb-import\">Agregar a la lista<\/button><\/div>\n      <div class=\"dpb-msg\" id=\"dpb-importmsg\"><\/div>\n    <\/details>\n\n    <div class=\"dpb-items\" id=\"dpb-items\"><\/div>\n    <button type=\"button\" class=\"dpb-add\" id=\"dpb-additem\">+ Agregar producto<\/button>\n  <\/div>\n\n  <div class=\"dpb-card\">\n    <h2>Etiqueta y hoja<\/h2>\n    <div class=\"dpb-row\">\n      <div class=\"dpb-f\">\n        <label for=\"dpb-size\">Tama\u00f1o de la etiqueta<\/label>\n        <select id=\"dpb-size\">\n          <option value=\"50x25\">50 \u00d7 25 mm<\/option>\n          <option value=\"40x30\">40 \u00d7 30 mm<\/option>\n          <option value=\"60x40\">60 \u00d7 40 mm<\/option>\n          <option value=\"custom\">Otro tama\u00f1o<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"dpb-f\">\n        <label for=\"dpb-paper\">D\u00f3nde vas a imprimir<\/label>\n        <select id=\"dpb-paper\">\n          <option value=\"carta\">Hoja carta<\/option>\n          <option value=\"a4\">Hoja A4<\/option>\n          <option value=\"rollo\">Rollo (una por p\u00e1gina)<\/option>\n        <\/select>\n      <\/div>\n    <\/div>\n    <div class=\"dpb-row\" id=\"dpb-customrow\" style=\"display:none\">\n      <div class=\"dpb-f\"><label for=\"dpb-cw\">Ancho (mm)<\/label><input id=\"dpb-cw\" type=\"number\" min=\"20\" max=\"100\" step=\"1\" inputmode=\"numeric\"><\/div>\n      <div class=\"dpb-f\"><label for=\"dpb-ch\">Alto (mm)<\/label><input id=\"dpb-ch\" type=\"number\" min=\"15\" max=\"100\" step=\"1\" inputmode=\"numeric\"><\/div>\n    <\/div>\n    <div class=\"dpb-chk\">\n      <label><input type=\"checkbox\" id=\"dpb-sn\"> Mostrar nombre<\/label>\n      <label><input type=\"checkbox\" id=\"dpb-sp\"> Mostrar precio<\/label>\n      <label><input type=\"checkbox\" id=\"dpb-sc\"> Mostrar n\u00famero del c\u00f3digo<\/label>\n      <label id=\"dpb-cutwrap\"><input type=\"checkbox\" id=\"dpb-cut\"> L\u00edneas de corte<\/label>\n    <\/div>\n    <details>\n      <summary>C\u00f3digos internos y ajustes de la hoja<\/summary>\n      <div class=\"dpb-row\">\n        <div class=\"dpb-f\">\n          <label for=\"dpb-pre\">Prefijo del c\u00f3digo interno<\/label>\n          <input id=\"dpb-pre\" maxlength=\"6\" placeholder=\"Ej: P\">\n          <small>Letras sin tilde, n\u00fameros o guion. Ej: P00001, P00002\u2026<\/small>\n        <\/div>\n        <div class=\"dpb-f\">\n          <label for=\"dpb-next\">Siguiente consecutivo<\/label>\n          <input id=\"dpb-next\" type=\"number\" min=\"1\" max=\"99999\" step=\"1\" inputmode=\"numeric\">\n          <small>Sube solo cada vez que se asigna un c\u00f3digo.<\/small>\n        <\/div>\n      <\/div>\n      <div class=\"dpb-row\" id=\"dpb-sheetrow\">\n        <div class=\"dpb-f\"><label for=\"dpb-mg\">Margen de la hoja (mm)<\/label><input id=\"dpb-mg\" type=\"number\" min=\"0\" max=\"30\" step=\"0.5\" inputmode=\"decimal\"><\/div>\n        <div class=\"dpb-f\"><label for=\"dpb-gp\">Separaci\u00f3n entre etiquetas (mm)<\/label><input id=\"dpb-gp\" type=\"number\" min=\"0\" max=\"20\" step=\"0.5\" inputmode=\"decimal\"><\/div>\n        <div class=\"dpb-f\"><label for=\"dpb-skip\">Saltar las primeras<\/label><input id=\"dpb-skip\" type=\"number\" min=\"0\" max=\"200\" step=\"1\" inputmode=\"numeric\"><small>Para reusar una hoja adhesiva ya empezada.<\/small><\/div>\n      <\/div>\n    <\/details>\n    <div class=\"dpb-meter\" id=\"dpb-meter\"><\/div>\n    <div class=\"dpb-err\" id=\"dpb-err\"><\/div>\n    <button type=\"button\" class=\"dpb-btn dpb-btn-big\" id=\"dpb-go\">Generar etiquetas gratis<\/button>\n\n    <div class=\"dpb-res\" id=\"dpb-res\">\n      <h2>\u00a1Listo! As\u00ed queda tu primera hoja<\/h2>\n      <p class=\"dpb-sum\" id=\"dpb-sum\"><\/p>\n      <ul class=\"dpb-warns\" id=\"dpb-warns\"><\/ul>\n      <div class=\"dpb-prev\"><div class=\"dpb-prev-in\" id=\"dpb-prev\"><\/div><\/div>\n      <div class=\"dpb-res-actions\">\n        <button type=\"button\" class=\"dpb-btn dpb-btn-dark\" id=\"dpb-print\">Imprimir o guardar PDF<\/button>\n        <button type=\"button\" class=\"dpb-btn dpb-btn-light\" id=\"dpb-csv\">Descargar lista con c\u00f3digos (CSV)<\/button>\n      <\/div>\n      <p class=\"dpb-legal\">Al imprimir elige <strong>escala 100 %<\/strong> (tama\u00f1o real), m\u00e1rgenes <strong>ninguno<\/strong> y sin encabezados. Antes de usar las hojas adhesivas, imprime una prueba en papel normal, ponla encima y revisa que cuadre.<\/p>\n\n      <div class=\"dpb-lead\">\n        <h3>\u00bfQuieres esto autom\u00e1tico en tu negocio?<\/h3>\n        <p>Con DonPedro POS el precio y el c\u00f3digo salen del inventario, imprimes las etiquetas desde el sistema y cobras con el lector. D\u00e9janos tus datos y te mostramos c\u00f3mo.<\/p>\n        <div class=\"dpb-row\">\n          <div class=\"dpb-f\"><label for=\"dpb-lname\">Nombre del negocio<\/label><input id=\"dpb-lname\" maxlength=\"60\" placeholder=\"Ej: Ferreter\u00eda El Tornillo\"><\/div>\n          <div class=\"dpb-f\"><label for=\"dpb-lwa\">WhatsApp<\/label><input id=\"dpb-lwa\" type=\"tel\" inputmode=\"numeric\" maxlength=\"16\" placeholder=\"Ej: 3001234567\"><\/div>\n        <\/div>\n        <div class=\"dpb-err\" id=\"dpb-lerr\"><\/div>\n        <button type=\"button\" class=\"dpb-btn dpb-btn-wa\" id=\"dpb-lgo\" style=\"width:100%\">Quiero inventario con lector de c\u00f3digo de barras<\/button>\n        <p class=\"dpb-legal\">Tus datos quedan en el CRM de DonPedro Software para contactarte. Para borrarlos, escr\u00edbenos al +57 310 598 0444. Tu lista de productos no se env\u00eda: queda solo en este navegador.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div id=\"dpb-printarea\"><\/div>\n\n  <div class=\"dpb-cta\">\n    <h3>Ya tienes las etiquetas. Ahora cobra con el lector.<\/h3>\n    <p>Con DonPedro POS escaneas el c\u00f3digo, el producto sale con su precio, se descuenta del inventario y la venta sale con factura electr\u00f3nica DIAN. Desde $90.000 al mes, sin cl\u00e1usula de permanencia.<\/p>\n    <a href=\"https:\/\/wa.me\/573105980444?text=Hola%2C%20hice%20etiquetas%20con%20c%C3%B3digo%20de%20barras%20y%20quiero%20saber%20de%20DonPedro%20POS%20con%20lector\" target=\"_blank\" rel=\"noopener\">Hablar por WhatsApp<\/a>\n    <a class=\"dpb-alt\" href=\"\/negociosnubeIA\/punto-de-venta-pos\/\">Ver DonPedro POS<\/a>\n  <\/div>\n\n  <h2>C\u00f3mo hacer etiquetas de precio con c\u00f3digo de barras<\/h2>\n  <p>Escribe cada producto con su nombre, precio y cu\u00e1ntas etiquetas necesitas. Si el producto ya trae c\u00f3digo de barras de f\u00e1brica, c\u00f3pialo en el campo <em>C\u00f3digo<\/em> o escan\u00e9alo con tu lector directamente en ese campo. Si no tiene, d\u00e9jalo vac\u00edo: el generador le asigna un <strong>c\u00f3digo interno<\/strong> consecutivo (por ejemplo P00001) en formato Code 128.<\/p>\n  <p>Luego eliges el tama\u00f1o de la etiqueta y d\u00f3nde vas a imprimir: hoja carta o A4 (adhesiva o papel normal para recortar) o rollo para impresora t\u00e9rmica de etiquetas. Al tocar <em>Generar<\/em> ves la primera hoja y cu\u00e1ntas hojas vas a gastar.<\/p>\n\n  <h2>EAN-13 o c\u00f3digo interno: cu\u00e1l usar<\/h2>\n  <p>Si escribes un c\u00f3digo de 13 d\u00edgitos, la herramienta revisa el <strong>d\u00edgito de control<\/strong> (el \u00faltimo n\u00famero, que se calcula con los otros 12). Si escribes 12 d\u00edgitos, calcula ese \u00faltimo n\u00famero y lo completa. As\u00ed detectas errores de digitaci\u00f3n antes de imprimir.<\/p>\n  <p>Ojo: los c\u00f3digos EAN oficiales, los que necesitas para vender en almacenes de cadena y grandes superficies, los asigna <a href=\"https:\/\/gs1co.org\/\" target=\"_blank\" rel=\"noopener\">GS1 Colombia<\/a>. No los inventes: un n\u00famero inventado puede ser el de otro producto. Los c\u00f3digos internos de esta herramienta sirven para el lector de tu propio negocio y tu POS, no para venderle a otras cadenas.<\/p>\n\n  <h2>Ejemplo con n\u00fameros<\/h2>\n  <p>Una tienda tiene 30 productos y quiere 3 etiquetas de cada uno: 90 etiquetas. En tama\u00f1o 50 \u00d7 25 mm, hoja carta, margen de 8 mm y 2 mm de separaci\u00f3n caben 3 columnas por 9 filas, es decir 27 etiquetas por hoja. Las 90 etiquetas ocupan 4 hojas (3 llenas y una con 9). En A4 caben 30 por hoja, as\u00ed que ser\u00edan 3 hojas exactas.<\/p>\n\n  <h2>Preguntas frecuentes<\/h2>\n  <h3>\u00bfEl generador de c\u00f3digo de barras es gratis?<\/h3>\n  <p>S\u00ed. No tiene l\u00edmite de uso, no pide registro y no deja marca de agua. Tus productos quedan guardados en tu navegador para que vuelvas a imprimir cuando cambien los precios.<\/p>\n  <h3>\u00bfPuedo usar estos c\u00f3digos para vender en almacenes de cadena?<\/h3>\n  <p>No. Para eso necesitas c\u00f3digos EAN asignados por GS1 Colombia a tu empresa. Los c\u00f3digos internos sirven para tu propio negocio: inventario, caja y lector de c\u00f3digo de barras.<\/p>\n  <h3>\u00bfMi lector de c\u00f3digo de barras lee estas etiquetas?<\/h3>\n  <p>Los lectores comunes, l\u00e1ser o de imagen, leen EAN-13 y Code 128. Imprime primero una hoja de prueba y escan\u00e9ala antes de imprimir todo, sobre todo si usas etiquetas peque\u00f1as o c\u00f3digos largos.<\/p>\n  <h3>\u00bfQu\u00e9 impresora necesito?<\/h3>\n  <p>Sirve una impresora l\u00e1ser o de tinta con hojas adhesivas carta o A4, o papel normal para recortar. Si tienes impresora t\u00e9rmica de etiquetas, elige la opci\u00f3n Rollo y el mismo tama\u00f1o de tu rollo.<\/p>\n  <h3>\u00bfC\u00f3mo paso los c\u00f3digos internos a mi sistema?<\/h3>\n  <p>Despu\u00e9s de generar, descarga la lista en CSV: trae nombre, precio y el c\u00f3digo asignado a cada producto. Con esa lista los creas en tu POS para que al escanear salga el producto correcto.<\/p>\n\n  <p>\u00bfTienes restaurante? Prueba tambi\u00e9n nuestro <a href=\"\/negociosnubeIA\/menu-qr-gratis-restaurantes\/\">men\u00fa QR gratis con pedidos por WhatsApp<\/a>.<\/p>\n\n<\/div>\n\n<script>\n(function(){\n  var KEY='dpbEtiquetas';\n  var LIB='https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jsbarcode\/3.11.6\/JsBarcode.all.min.js';\n  var PAPERS={carta:{n:'carta',w:215.9,h:279.4},a4:{n:'A4',w:210,h:297}};\n  var SIZES={'50x25':[50,25],'40x30':[40,30],'60x40':[60,40]};\n  var MAXL=2000, MAXI=300, PAD_X=1.5, PAD_Y=1.2;\n  var EXAMPLE=[\n    {n:'Arroz blanco 500 g',p:3200,c:'',q:12},\n    {n:'Aceite de girasol 1 L',p:14900,c:'',q:6},\n    {n:'Jab\u00f3n de barra',p:2500,c:'',q:10},\n    {n:'Galletas surtidas (EAN de ejemplo)',p:8900,c:'590123412345',q:6}\n  ];\n  var DEF={size:'50x25',cw:50,ch:25,paper:'carta',sn:true,sp:true,sc:true,cut:true,pre:'P',next:1,mg:8,gp:2,skip:0};\n  var state=null, last=null;\n\n  function $(id){return document.getElementById(id);}\n  function el(tag,attrs){var e=document.createElement(tag);for(var k in attrs){if(k==='text')e.textContent=attrs[k];else e.setAttribute(k,attrs[k]);}return e;}\n  function fmt(n){return '$'+Math.round(n).toLocaleString('es-CO');}\n  function num(v,min,max,def){var x=parseFloat(v);if(isNaN(x))return def;return Math.min(max,Math.max(min,x));}\n  function blankItem(){return {n:'',p:0,c:'',q:1};}\n  function blank(){return {items:[blankItem()],cfg:JSON.parse(JSON.stringify(DEF))};}\n  function save(){try{localStorage.setItem(KEY,JSON.stringify(state));}catch(e){}}\n  function load(){\n    try{\n      var s=localStorage.getItem(KEY);if(!s)return null;\n      var o=JSON.parse(s);if(!o)return null;if(!o.items)return null;\n      var cfg=JSON.parse(JSON.stringify(DEF));for(var k in o.cfg||{})cfg[k]=o.cfg[k];\n      o.cfg=cfg;if(!o.items.length)o.items=[blankItem()];return o;\n    }catch(e){}\n    return null;\n  }\n\n  \/* Precio en formato colombiano: 12.500 \/ $ 12.500 \/ 12500 \/ 12.500,50 *\/\n  function parsePrice(v){\n    var s=String(v==null?'':v).replace(\/[^\\d.,]\/g,'');\n    if(!s)return 0;\n    var d=s.indexOf('.')>=0, c=s.indexOf(',')>=0;\n    if(d?c:false){\n      var cut=Math.max(s.lastIndexOf('.'),s.lastIndexOf(','));\n      return Math.round(parseFloat(s.slice(0,cut).replace(\/[.,]\/g,'')+'.'+s.slice(cut+1))||0);\n    }\n    if(\/^\\d{1,3}(\\.\\d{3})+$\/.test(s))return parseInt(s.replace(\/\\.\/g,''),10);\n    if(\/^\\d{1,3}(,\\d{3})+$\/.test(s))return parseInt(s.replace(\/,\/g,''),10);\n    return Math.round(parseFloat(s.replace(',','.'))||0);\n  }\n\n  \/* D\u00edgito de control EAN-13 a partir de los 12 primeros d\u00edgitos *\/\n  function eanCheck(d12){\n    var s=0;\n    for(var i=0;i<12;i++)s+=parseInt(d12.charAt(i),10)*(i%2?3:1);\n    return String((10-s%10)%10);\n  }\n  function upcValid(d12){return eanCheck('0'+d12.slice(0,11))===d12.charAt(11);}\n\n  function analyze(raw){\n    var c=String(raw||'').trim();\n    if(\/^[\\d ]+$\/.test(c))c=c.replace(\/ \/g,'');\n    if(!c)return {fmt:'',val:'',lv:'',msg:'Sin c\u00f3digo: al generar se le asigna uno interno.'};\n    if(\/\\d[.,]\\d+e\\+\\d+\/i.test(c))return {fmt:'',val:c,lv:'bad',msg:'Excel convirti\u00f3 este c\u00f3digo en notaci\u00f3n cient\u00edfica. Pon la columna en formato Texto y vuelve a copiarla.'};\n    if(!\/^[\\x20-\\x7E]+$\/.test(c))return {fmt:'',val:c,lv:'bad',msg:'El c\u00f3digo solo puede tener letras sin tilde, n\u00fameros, guion y espacios.'};\n    if(c.length>40)return {fmt:'',val:c,lv:'bad',msg:'El c\u00f3digo es muy largo (m\u00e1ximo 40 caracteres).'};\n    if(\/^\\d{13}$\/.test(c)){\n      var ok=eanCheck(c.slice(0,12));\n      if(ok===c.charAt(12))return {fmt:'EAN13',val:c,lv:'ok',msg:'\u2713 EAN-13 v\u00e1lido.'};\n      return {fmt:'CODE128',val:c,lv:'warn',msg:'\u26a0 El d\u00edgito de control no cuadra: con esos 12 primeros n\u00fameros deber\u00eda terminar en '+ok+'. Revisa el n\u00famero. Si as\u00ed est\u00e1 en tu sistema, se imprime en Code 128 tal cual.'};\n    }\n    if(\/^\\d{12}$\/.test(c)){\n      var full=c+eanCheck(c);\n      return {fmt:'EAN13',val:full,lv:'ok',msg:'Se completa como EAN-13: '+full+' (d\u00edgito de control '+full.charAt(12)+').'+(upcValid(c)?' Si es un c\u00f3digo UPC de 12 d\u00edgitos de un producto importado, escribe un 0 adelante.':'')};\n    }\n    return {fmt:'CODE128',val:c,lv:'ok',msg:'Code 128 (c\u00f3digo interno).'};\n  }\n\n  function changed(){save();$('dpb-res').classList.remove('dpb-show');document.body.classList.remove('dpb-on');meter();}\n\n  function renderItems(){\n    var box=$('dpb-items');\n    while(box.firstChild)box.removeChild(box.firstChild);\n    state.items.forEach(function(it,i){\n      var row=el('div',{'class':'dpb-item'});\n      function field(cls,lab,attrs,val,on){\n        var l=el('label',{'class':'dpb-c '+cls});l.appendChild(el('span',{text:lab}));\n        var inp=el('input',attrs);inp.value=val;inp.addEventListener('input',function(){on(inp.value);});\n        l.appendChild(inp);row.appendChild(l);return inp;\n      }\n      var st=el('div',{'class':'dpb-st'});\n      function status(){var a=analyze(it.c);st.className='dpb-st'+(a.lv?' dpb-'+a.lv:'');st.textContent=a.msg;}\n      field('dpb-cn','Producto',{maxlength:'60',placeholder:'Ej: Jab\u00f3n de barra'},it.n,function(v){it.n=v;changed();});\n      field('dpb-cp','Precio',{inputmode:'numeric',maxlength:'14',placeholder:'Ej: 12.500'},it.p?Math.round(it.p).toLocaleString('es-CO'):'',function(v){it.p=parsePrice(v);changed();});\n      field('dpb-cq','Etiquetas',{type:'number',min:'0',max:'500',step:'1',inputmode:'numeric'},String(it.q),function(v){it.q=Math.round(num(v,0,500,0));changed();});\n      field('dpb-cc','C\u00f3digo (opcional: escan\u00e9alo o escr\u00edbelo)',{maxlength:'40',placeholder:'Vac\u00edo = c\u00f3digo interno',autocomplete:'off'},it.c,function(v){it.c=v;status();changed();});\n      var x=el('button',{type:'button','class':'dpb-x',title:'Quitar producto','aria-label':'Quitar producto',text:'\u00d7'});\n      x.addEventListener('click',function(){state.items.splice(i,1);if(!state.items.length)state.items.push(blankItem());renderItems();changed();});\n      row.appendChild(x);row.appendChild(st);status();box.appendChild(row);\n    });\n  }\n\n  function renderCfg(){\n    var c=state.cfg;\n    $('dpb-size').value=c.size;$('dpb-paper').value=c.paper;$('dpb-cw').value=c.cw;$('dpb-ch').value=c.ch;\n    $('dpb-sn').checked=!!c.sn;$('dpb-sp').checked=!!c.sp;$('dpb-sc').checked=!!c.sc;$('dpb-cut').checked=!!c.cut;\n    $('dpb-pre').value=c.pre;$('dpb-next').value=c.next;$('dpb-mg').value=c.mg;$('dpb-gp').value=c.gp;$('dpb-skip').value=c.skip;\n    $('dpb-customrow').style.display=c.size==='custom'?'flex':'none';\n    $('dpb-sheetrow').style.display=c.paper==='rollo'?'none':'flex';\n    $('dpb-cutwrap').style.display=c.paper==='rollo'?'none':'flex';\n  }\n\n  function labelSize(){\n    var c=state.cfg;\n    if(c.size==='custom')return [num(c.cw,20,100,50),num(c.ch,15,100,25)];\n    return SIZES[c.size]||SIZES['50x25'];\n  }\n  \/* Cu\u00e1ntas etiquetas caben en la hoja *\/\n  function layout(){\n    var c=state.cfg, ls=labelSize(), w=ls[0], h=ls[1];\n    if(c.paper==='rollo')return {roll:true,w:w,h:h,cols:1,rows:1,per:1,W:w,H:h,mg:0,gp:0};\n    var P=PAPERS[c.paper]||PAPERS.carta, mg=num(c.mg,0,30,8), gp=num(c.gp,0,20,2);\n    var cols=Math.floor((P.w-2*mg+gp)\/(w+gp)+1e-9), rows=Math.floor((P.h-2*mg+gp)\/(h+gp)+1e-9);\n    cols=Math.max(0,cols);rows=Math.max(0,rows);\n    return {roll:false,w:w,h:h,cols:cols,rows:rows,per:cols*rows,W:P.w,H:P.h,mg:mg,gp:gp,pn:P.n};\n  }\n  function validItems(){return state.items.filter(function(it){return (it.n.trim()!==''||String(it.c).trim()!=='')?it.q>0:false;});}\n\n  function meter(){\n    var L=layout(), items=validItems(), total=0, m=$('dpb-meter');\n    items.forEach(function(it){total+=it.q;});\n    var skip=L.roll?0:Math.round(num(state.cfg.skip,0,200,0));\n    if(!L.roll){\n      if(!L.per){m.className='dpb-meter dpb-warn';m.textContent='\u26a0 Esa etiqueta no cabe en la hoja. Baja el tama\u00f1o, el margen o la separaci\u00f3n.';return;}\n      var sheets=total?Math.ceil((total+skip)\/L.per):0;\n      m.className='dpb-meter';\n      m.textContent=L.w+' \u00d7 '+L.h+' mm \u00b7 caben '+L.per+' por hoja '+L.pn+' ('+L.cols+' columnas \u00d7 '+L.rows+' filas)'+(total?' \u00b7 '+total+' etiquetas = '+sheets+(sheets===1?' hoja':' hojas'):'');\n    }else{\n      m.className='dpb-meter';\n      m.textContent='Rollo de '+L.w+' \u00d7 '+L.h+' mm \u00b7 una etiqueta por p\u00e1gina'+(total?' \u00b7 '+total+' etiquetas':'');\n    }\n    if(total>MAXL){m.className='dpb-meter dpb-warn';m.textContent+=' \u00b7 M\u00e1ximo '+MAXL+' etiquetas por impresi\u00f3n.';}\n  }\n\n  function showErr(id,t){var e=$(id);e.textContent=t;e.style.display=t?'block':'none';}\n\n  function loadLib(){\n    if(window.JsBarcode)return Promise.resolve();\n    return new Promise(function(ok,fail){var s=document.createElement('script');s.src=LIB;s.async=true;s.onload=ok;s.onerror=fail;document.head.appendChild(s);});\n  }\n\n  \/* SVG del c\u00f3digo de barras (solo barras; el n\u00famero va aparte en texto) *\/\n  function makeSvg(a){\n    var svg=document.createElementNS('http:\/\/www.w3.org\/2000\/svg','svg'), valid=true;\n    window.JsBarcode(svg,a.val,{format:a.fmt,width:2,height:60,displayValue:false,margin:0,marginLeft:20,marginRight:20,background:'#ffffff',lineColor:'#000000',valid:function(v){valid=v;}});\n    if(!valid)throw new Error('codigo');\n    var w=parseFloat(svg.getAttribute('width')), h=parseFloat(svg.getAttribute('height'));\n    svg.setAttribute('viewBox','0 0 '+w+' '+h);\n    svg.removeAttribute('width');svg.removeAttribute('height');svg.removeAttribute('style');\n    svg.setAttribute('preserveAspectRatio','none');\n    svg.setAttribute('shape-rendering','crispEdges');\n    svg.setAttribute('aria-hidden','true');\n    return {svg:svg,modules:w\/2};\n  }\n\n  function clamp(v,a,b){return Math.min(b,Math.max(a,v));}\n  function makeLabel(it,a,tpl,L){\n    var c=state.cfg, lab=el('div',{'class':'dpb-lab'});\n    lab.style.width=L.w+'mm';lab.style.height=L.h+'mm';lab.style.padding=PAD_Y+'mm '+PAD_X+'mm';\n    var fn=clamp(L.h*.11,2.3,4.5), fp=Math.min(clamp(L.h*.24,4.5,12),L.w*.16), fc=clamp(L.h*.085,2,3.2);\n    if(c.sn?it.n.trim()!=='':false){\n      var n=el('div',{'class':'dpb-ln',text:it.n.trim()});\n      n.style.fontSize=fn+'mm';n.style.webkitLineClamp=String(L.h<30?1:2);n.style.maxHeight=(fn*1.15*(L.h<30?1:2)+.1)+'mm';\n      lab.appendChild(n);\n    }\n    if(c.sp?it.p>0:false){var p=el('div',{'class':'dpb-lp',text:fmt(it.p)});p.style.fontSize=fp+'mm';lab.appendChild(p);}\n    var b=el('div',{'class':'dpb-lb'});b.appendChild(tpl.svg.cloneNode(true));lab.appendChild(b);\n    if(c.sc){var t=el('div',{'class':'dpb-lc',text:a.val});t.style.fontSize=fc+'mm';lab.appendChild(t);}\n    return lab;\n  }\n  function newSheet(L){\n    var s=el('div',{'class':'dpb-sheet'+((state.cfg.cut?!L.roll:false)?' dpb-cut':'')});\n    s.style.width=L.W+'mm';s.style.height=(L.roll?L.H:L.H-.6)+'mm';\n    s.style.padding=L.mg+'mm';s.style.gap=L.gp+'mm';\n    s.style.gridTemplateColumns='repeat('+L.cols+','+L.w+'mm)';s.style.gridAutoRows=L.h+'mm';\n    return s;\n  }\n\n  function setPageCss(L){\n    var st=$('dpb-pagecss');\n    if(!st){st=el('style',{id:'dpb-pagecss'});document.head.appendChild(st);}\n    st.textContent='@media print{@page{size:'+L.W+'mm '+L.H+'mm;margin:0}}';\n  }\n\n  function fitPreview(){\n    if(!last)return;\n    var box=$('dpb-prev'), node=box.firstChild;if(!node)return;\n    var pxW=last.pw*96\/25.4, pxH=last.ph*96\/25.4, s=Math.min(1,box.clientWidth\/pxW);\n    node.style.transform='scale('+s+')';box.style.height=Math.ceil(pxH*s)+'px';\n  }\n\n  function generate(){\n    showErr('dpb-err','');\n    var c=state.cfg, L=layout(), items=validItems();\n    if(!items.length){showErr('dpb-err','Agrega al menos un producto con nombre o c\u00f3digo y 1 etiqueta o m\u00e1s.');return;}\n    if(!L.roll?!L.per:false){showErr('dpb-err','Esa etiqueta no cabe en la hoja. Baja el tama\u00f1o, el margen o la separaci\u00f3n.');return;}\n    var total=0, bad=null;\n    items.forEach(function(it){total+=it.q;var a=analyze(it.c);if(a.lv==='bad')if(!bad)bad=(it.n.trim()||it.c)+': '+a.msg;});\n    if(bad){showErr('dpb-err',bad);return;}\n    if(total>MAXL){showErr('dpb-err','Son '+total+' etiquetas. Imprime m\u00e1ximo '+MAXL+' por vez: divide la lista.');return;}\n\n    \/* Completa EAN de 12 d\u00edgitos y asigna c\u00f3digos internos sin repetir *\/\n    var used={}, assigned=0;\n    state.items.forEach(function(it){var a=analyze(it.c);if(a.val){if(a.fmt==='EAN13')it.c=a.val;used[String(it.c).trim()]=1;}});\n    var pre=String(c.pre||'').toUpperCase().replace(\/[^A-Z0-9-]\/g,'').slice(0,6), next=Math.round(num(c.next,1,99999,1));\n    items.forEach(function(it){\n      if(String(it.c).trim()!=='')return;\n      var code;do{code=pre+('0000'+next).slice(-5);next++;}while(used[code]);\n      used[code]=1;it.c=code;assigned++;\n    });\n    c.pre=pre;c.next=next;save();renderItems();renderCfg();\n\n    var btn=$('dpb-go');btn.disabled=true;btn.textContent='Generando\u2026';\n    loadLib().then(function(){\n      var warns=[], seen={}, area=$('dpb-printarea');\n      while(area.firstChild)area.removeChild(area.firstChild);\n      var tpls=items.map(function(it){\n        var a=analyze(it.c), tpl=makeSvg(a), mm=(L.w-2*PAD_X)\/tpl.modules;\n        if(mm<.25)warns.push((it.n.trim()||a.val)+': el c\u00f3digo queda muy delgado en '+L.w+' mm de ancho. Usa una etiqueta m\u00e1s ancha o un c\u00f3digo m\u00e1s corto.');\n        if(seen[a.val])warns.push('El c\u00f3digo '+a.val+' est\u00e1 repetido en varios productos.');\n        seen[a.val]=1;\n        return {it:it,a:a,tpl:tpl};\n      });\n      var skip=L.roll?0:Math.round(num(c.skip,0,200,0)), sheet=null, slot=0, sheets=0;\n      function place(node){\n        if(!sheet){sheet=newSheet(L);area.appendChild(sheet);sheets++;slot=0;}\n        sheet.appendChild(node);slot++;\n        if(slot>=L.per)sheet=null;\n      }\n      for(var k=0;k<skip;k++)place(el('div',{'aria-hidden':'true'}));\n      tpls.forEach(function(t){for(var q=0;q<t.it.q;q++)place(makeLabel(t.it,t.a,t.tpl,L));});\n\n      setPageCss(L);\n      document.body.classList.add('dpb-on');\n      var prev=$('dpb-prev');while(prev.firstChild)prev.removeChild(prev.firstChild);\n      if(L.roll){\n        var strip=el('div',{}), n=Math.min(total,6), sw=Math.min(n,3)*(L.w+4)+4;\n        strip.style.cssText='background:#fff;display:flex;flex-wrap:wrap;gap:4mm;padding:2mm;width:'+sw+'mm';\n        for(var r=0;r<n;r++){var cl=area.children[r].firstChild.cloneNode(true);cl.style.outline='.2mm dashed #9ca3af';strip.appendChild(cl);}\n        prev.appendChild(strip);\n        last={pw:sw,ph:Math.ceil(n\/3)*(L.h+4)+4,total:total,sheets:total,L:L,items:items.length};\n      }else{\n        prev.appendChild(area.firstChild.cloneNode(true));\n        last={pw:L.W,ph:L.H,total:total,sheets:sheets,L:L,items:items.length};\n      }\n      $('dpb-sum').textContent=L.roll\n        ?(total+' etiquetas de '+L.w+' \u00d7 '+L.h+' mm en rollo (una por p\u00e1gina) para '+items.length+(items.length===1?' producto.':' productos.'))\n        :(total+' etiquetas de '+L.w+' \u00d7 '+L.h+' mm para '+items.length+(items.length===1?' producto':' productos')+' \u00b7 '+L.per+' por hoja '+L.pn+' \u00b7 '+sheets+(sheets===1?' hoja':' hojas')+(skip?' (saltando las primeras '+skip+')':'')+'.'+(assigned?' Se asignaron '+assigned+' c\u00f3digos internos nuevos; quedaron guardados en tu lista.':''));\n      var wl=$('dpb-warns');while(wl.firstChild)wl.removeChild(wl.firstChild);\n      warns.forEach(function(w){wl.appendChild(el('li',{text:w}));});\n      $('dpb-res').classList.add('dpb-show');\n      fitPreview();\n      $('dpb-res').scrollIntoView({behavior:'smooth',block:'start'});\n    }).catch(function(e){\n      showErr('dpb-err',(e?e.message:'')==='codigo'?'Uno de los c\u00f3digos no se pudo dibujar. Revisa los c\u00f3digos marcados.':'No pudimos cargar el generador de c\u00f3digos. Revisa tu conexi\u00f3n e int\u00e9ntalo de nuevo.');\n    }).then(function(){btn.disabled=false;btn.textContent='Generar etiquetas gratis';});\n  }\n\n  function importPaste(){\n    var txt=$('dpb-paste').value, lines=txt.split(\/\\r?\\n\/), added=0, msg=$('dpb-importmsg');\n    var items=state.items.filter(function(it){return (it.n.trim()!==''||String(it.c).trim()!=='');});\n    lines.forEach(function(line,idx){\n      if(!line.trim())return;\n      var cols=line.indexOf('\\t')>=0?line.split('\\t'):line.split(';');\n      var n=(cols[0]||'').trim(), pr=(cols[1]||'').trim(), cd=(cols[2]||'').trim(), q=(cols[3]||'').trim();\n      if(idx===0)if(!\/\\d\/.test(pr))return;\n      if(!n)if(!cd)return;\n      if(items.length>=MAXI)return;\n      items.push({n:n.slice(0,60),p:parsePrice(pr),c:cd.slice(0,40),q:q?Math.round(num(q,0,500,1)):1});\n      added++;\n    });\n    if(!items.length)items.push(blankItem());\n    state.items=items;renderItems();changed();\n    msg.style.display='block';\n    msg.textContent=added?'\u2713 Se agregaron '+added+(added===1?' producto.':' productos.')+' Revisa los mensajes de cada c\u00f3digo.':'No encontramos productos. Copia las columnas nombre, precio y c\u00f3digo desde Excel y p\u00e9galas aqu\u00ed.';\n    if(added)$('dpb-paste').value='';\n  }\n\n  function downloadCsv(){\n    var rows=[['Producto','Precio','Codigo','Formato','Etiquetas']];\n    validItems().forEach(function(it){var a=analyze(it.c);rows.push([it.n.trim(),String(Math.round(it.p||0)),a.val,a.fmt==='EAN13'?'EAN-13':'Code 128',String(it.q)]);});\n    var csv='\ufeff'+rows.map(function(r){return r.map(function(v){return '\"'+String(v).replace(\/\"\/g,'\"\"')+'\"';}).join(';');}).join('\\r\\n');\n    var a=document.createElement('a');a.href=URL.createObjectURL(new Blob([csv],{type:'text\/csv;charset=utf-8'}));\n    a.download='etiquetas-codigos.csv';document.body.appendChild(a);a.click();a.remove();\n  }\n\n  function normWa(v){var d=String(v||'').replace(\/\\D\/g,'');if(d.length===10)if(d.charAt(0)==='3')d='57'+d;return d;}\n  function sendLead(){\n    showErr('dpb-lerr','');\n    var name=$('dpb-lname').value.trim(), phone=normWa($('dpb-lwa').value);\n    if(!name){showErr('dpb-lerr','Escribe el nombre del negocio.');$('dpb-lname').focus();return;}\n    if(!(\/^573\\d{9}$\/.test(phone)||\/^\\d{11,15}$\/.test(phone))){showErr('dpb-lerr','Escribe un WhatsApp v\u00e1lido: celular de 10 d\u00edgitos que empiece por 3.');$('dpb-lwa').focus();return;}\n    try{fetch('\/negociosnubeIA\/crm-proxy.php',{method:'POST',headers:{'Content-Type':'application\/json'},\n      body:JSON.stringify({name:name,phone:phone,email:'',type:'Herramienta gratis: Etiquetas con c\u00f3digo de barras',website:''})}).catch(function(){});}catch(e){}\n    var r=last||{total:0,items:0,L:layout()};\n    var txt='Hola, soy de '+name+'. Us\u00e9 el generador de etiquetas con c\u00f3digo de barras de posdonpedro.com: '+r.items+(r.items===1?' producto':' productos')+', '+r.total+' etiquetas de '+r.L.w+'\u00d7'+r.L.h+' mm. Quiero saber c\u00f3mo manejar inventario y lector de c\u00f3digo de barras con DonPedro POS.';\n    window.open('https:\/\/wa.me\/573105980444?text='+encodeURIComponent(txt),'_blank');\n    var b=$('dpb-lgo');b.textContent='\u2713 Listo, te escribimos pronto';\n  }\n\n  function bindCfg(id,key,kind){\n    $(id).addEventListener(kind==='chk'?'change':'input',function(){\n      var v=kind==='chk'?this.checked:this.value;\n      state.cfg[key]=v;\n      if(key==='size'){if(v!=='custom'){state.cfg.cw=SIZES[v][0];state.cfg.ch=SIZES[v][1];}renderCfg();}\n      if(key==='paper')renderCfg();\n      changed();\n    });\n  }\n\n  function init(){\n    document.body.appendChild($('dpb-printarea'));\n    bindCfg('dpb-size','size');bindCfg('dpb-paper','paper');bindCfg('dpb-cw','cw');bindCfg('dpb-ch','ch');\n    bindCfg('dpb-sn','sn','chk');bindCfg('dpb-sp','sp','chk');bindCfg('dpb-sc','sc','chk');bindCfg('dpb-cut','cut','chk');\n    bindCfg('dpb-pre','pre');bindCfg('dpb-next','next');bindCfg('dpb-mg','mg');bindCfg('dpb-gp','gp');bindCfg('dpb-skip','skip');\n    $('dpb-additem').addEventListener('click',function(){if(state.items.length<MAXI){state.items.push(blankItem());renderItems();changed();}});\n    $('dpb-example').addEventListener('click',function(){state.items=JSON.parse(JSON.stringify(EXAMPLE));renderItems();changed();});\n    $('dpb-clear').addEventListener('click',function(){if(confirm('\u00bfBorrar la lista y empezar en blanco?')){var cfg=state.cfg;state=blank();state.cfg=cfg;renderItems();changed();}});\n    $('dpb-import').addEventListener('click',importPaste);\n    $('dpb-go').addEventListener('click',generate);\n    $('dpb-print').addEventListener('click',function(){window.print();});\n    $('dpb-csv').addEventListener('click',downloadCsv);\n    $('dpb-lgo').addEventListener('click',sendLead);\n    window.addEventListener('resize',fitPreview);\n    state=load()||blank();\n    renderItems();renderCfg();meter();\n  }\n  window.dpbTest={eanCheck:eanCheck,analyze:analyze,parsePrice:parsePrice,layout:function(){return layout();}};\n  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else init();\n})();\n<\/script>\n\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@graph\":[\n{\"@type\":\"WebApplication\",\"name\":\"Generador de etiquetas de precio con c\u00f3digo de barras\",\"url\":\"https:\/\/posdonpedro.com\/negociosnubeIA\/generador-codigo-de-barras\/\",\"applicationCategory\":\"BusinessApplication\",\"operatingSystem\":\"Web\",\"inLanguage\":\"es-CO\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"COP\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"DonPedro Software\",\"url\":\"https:\/\/posdonpedro.com\/negociosnubeIA\/\"}},\n{\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"\u00bfEl generador de c\u00f3digo de barras es gratis?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00ed. No tiene l\u00edmite de uso, no pide registro y no deja marca de agua. Tus productos quedan guardados en tu navegador para que vuelvas a imprimir cuando cambien los precios.\"}},\n{\"@type\":\"Question\",\"name\":\"\u00bfPuedo usar estos c\u00f3digos para vender en almacenes de cadena?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. Para eso necesitas c\u00f3digos EAN asignados por GS1 Colombia a tu empresa. Los c\u00f3digos internos sirven para tu propio negocio: inventario, caja y lector de c\u00f3digo de barras.\"}},\n{\"@type\":\"Question\",\"name\":\"\u00bfMi lector de c\u00f3digo de barras lee estas etiquetas?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Los lectores comunes, l\u00e1ser o de imagen, leen EAN-13 y Code 128. Imprime primero una hoja de prueba y escan\u00e9ala antes de imprimir todo, sobre todo si usas etiquetas peque\u00f1as o c\u00f3digos largos.\"}},\n{\"@type\":\"Question\",\"name\":\"\u00bfQu\u00e9 impresora necesito?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Sirve una impresora l\u00e1ser o de tinta con hojas adhesivas carta o A4, o papel normal para recortar. Si tienes impresora t\u00e9rmica de etiquetas, elige la opci\u00f3n Rollo y el mismo tama\u00f1o de tu rollo.\"}},\n{\"@type\":\"Question\",\"name\":\"\u00bfC\u00f3mo paso los c\u00f3digos internos a mi sistema?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Despu\u00e9s de generar, descarga la lista en CSV: trae nombre, precio y el c\u00f3digo asignado a cada producto. Con esa lista los creas en tu POS para que al escanear salga el producto correcto.\"}}\n]}]}\n<\/script>","protected":false},"excerpt":{"rendered":"<p>Haz etiquetas de precio con c\u00f3digo de barras para tu tienda, minimercado, ferreter\u00eda o droguer\u00eda. Escribe o pega tus productos desde Excel, elige el tama\u00f1o y impr\u00edmelas en hoja carta, A4 o rollo. Gratis y sin crear cuenta. 1 \u00b7 Agrega tus productos2 \u00b7 Elige el tama\u00f1o3 \u00b7 Imprime y pega Tus productos Cargar un [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-421","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/pages\/421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/comments?post=421"}],"version-history":[{"count":1,"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/pages\/421\/revisions"}],"predecessor-version":[{"id":422,"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/pages\/421\/revisions\/422"}],"wp:attachment":[{"href":"https:\/\/posdonpedro.com\/negociosnubeIA\/wp-json\/wp\/v2\/media?parent=421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}