Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.5K
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!