Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.5K
Vistas
pdf-lib: cómo agregar una fuente personalizada

Mi entorno es el nodo v12.16.1 con mecanografiado agregado.

Estoy usando pdf-lib v1.16.0 ( https://www.npmjs.com/package/pdf-lib ) para completar el formulario para el archivo PDF dado. El código fuente de la biblioteca se puede encontrar aquí https://github.com/Hopding/pdf-lib y más en los documentos aquí https://pdf-lib.js.org/ .

Con respecto a las fuentes pdf-lib tiene un conjunto llamado StandardFonts que se proporciona dentro de lib.

 export enum StandardFonts { Courier = 'Courier',  CourierBold = 'Courier-Bold',  CourierOblique = 'Courier-Oblique',  CourierBoldOblique = 'Courier-BoldOblique',  Helvetica = 'Helvetica',  HelveticaBold = 'Helvetica-Bold',  HelveticaOblique = 'Helvetica-Oblique',  HelveticaBoldOblique = 'Helvetica-BoldOblique',  TimesRoman = 'Times-Roman',  TimesRomanBold = 'Times-Bold',  TimesRomanItalic = 'Times-Italic',  TimesRomanBoldItalic = 'Times-BoldItalic',  Symbol = 'Symbol', ZapfDingbats = 'ZapfDingbats', }

Muy a menudo tendría el requisito de aplicar una fuente que no está en la lista. Un ejemplo es cuando tiene algunos documentos/formularios de usuario para completar y luego aplicar una firma electrónica para aprobarlos. En ocasiones esa firma electrónica puede ser de otro tipo de letra, elegido por el usuario.

Entonces, ¿cómo podemos agregar un nuevo tipo de fuente de nuestra elección?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

De las especificaciones https://www.npmjs.com/package/pdf-lib#embed-font-and-measure-text

pdf-lib se basa en un módulo hermano para admitir la incrustación de fuentes personalizadas: @pdf-lib/fontkit. Debe agregar el módulo @pdf-lib/fontkit a su proyecto y registrarlo usando pdfDoc.registerFontkit(...) antes de incrustar fuentes personalizadas.

Tenemos que npm i --save @pdf-lib/fontkit y tenemos que tener una fuente desde donde leeremos la fuente. En mi caso, agregué el archivo .otf en el proyecto y cargué la fuente. Los archivos están estructurados como en la imagen: ingrese la descripción de la imagen aquí

 import path from 'path'; import fs from 'fs'; import {PDFDocument, PDFForm, StandardFonts, PDFFont} from 'pdf-lib'; import fontkit from '@pdf-lib/fontkit'; const pdfBytes = fs.readFileSync(path.join(__dirname, `/w_template/` + fileName + '.pdf')); const pdfDoc = await PDFDocument.load(pdfBytes); pdfDoc.registerFontkit(fontkit); //load font and embed it to pdf document const fontBytes = fs.readFileSync(path.join(__dirname, 'HouschkaHead-BoldItalic.otf')); const customFont = await pdfDoc.embedFont(fontBytes); const form = pdfDoc.getForm(); const textField = form.getTextField('signature'); textField.setFontSize(11); textField.setText('stefan z'); textField.updateAppearances(customFont); // form flatten is available from v1.16.0 and it makes form read-only (not editable) form.flatten(); const modifiedPdf = await pdfDoc.save();

Y este es el resultado final: compruebe cómo el campo del formulario de entrada de firma es diferente del resto de los campos de entrada que se rellenan con la fuente predeterminada ingrese la descripción de la imagen aquí Bonificación: si desea jugar con el color del texto de las entradas en el formulario, esto es lo que encontré mientras buscaba más en el código fuente de la biblioteca (puede que no sea óptimo, pero puede brindarle un punto de partida para más cosas):

 import {setFillingRgbColor} from 'pdf-lib' const textField = form.getTextField(fieldName); const da = textField.acroField.getDefaultAppearance() ?? ''; const newDa = da + '\n' + setFillingRgbColor(1, 0, 0).toString(); textField.acroField.setDefaultAppearance(newDa);

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Si alguien tiene dificultades para cambiar el fontSize de fuente al completar los campos de texto utilizando la última función incorporada llamada setFontSize() . Puede utilizar este enfoque.

 const { PDFDocument, setFontAndSize } = require('pdf-lib'); const pdfDoc = await PDFDocument.load(file); const form = pdfDoc.getForm(); const textField = form.getTextField('106Mobile.1'); textField.setText('This works fine'); const da = textField.acroField.getDefaultAppearance() ?? ''; const newDa = da + '\n' + setFontAndSize('Courier', 8).toString(); //setFontAndSize() method came to resuce textField.acroField.setDefaultAppearance(newDa);

Tuve que usar esto porque recibí un error que decía

No se encontró ninguna entrada /DA (aspecto predeterminado) para el campo: 106Title.1

al configurar los tamaños de fuente para algunos campos de texto (no todos). Pero degeneradamente tenía esos campos de texto. Se arregló usando la solución anterior.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda