margenes font estilos bootstrap php fonts mpdf

php - font - agregando fuente a mPDF



mpdf padding (5)

Recibo el siguiente error cuando intento generar un PDF usando la clase mPDF:

TTF file "C:/wamp/www/inc/mpdf/ttfonts/verdana.ttf": invalid checksum 20f65173c11 table: DSIG (expected 65173c11)

Subí los archivos de fuentes a mi directorio ttfonts y ttfonts la fuente en config_fonts.php esta manera:

"verdana" => array( ''R'' => "verdana.ttf", ''B'' => "verdanab.ttf", ''I'' => "verdanai.ttf", ''BI'' => "verdanaz.ttf", ),

Solo veo el error cuando activo el informe de errores de fuente en la configuración de configuración. Cuando desactivo los informes de errores, se genera el PDF, pero la fuente que se utiliza no es Verdana.

¿Alguna idea de lo que estoy haciendo mal?


A continuación se detallan los pasos para agregar una nueva familia de fuentes en la biblioteca mpdf:

  1. Descarga el archivo zip de la fuente y descomprímelo.
  2. Agregue nuevos newFont.ttf fuente newFont.ttf a esta carpeta de ubicación /mpdf/ttfonts .
  3. Edite /mpdf/config_fonts.php OR /mpdf/src/config/FontVariables.php para agregar una entrada a la matriz $this->fontdata para los nuevos archivos de fuente. Me gusta:

    $this->fontdata = array( "newFont" => array( ''R'' => "newFont-Regular.ttf", ''B'' => "newFont-Bold.ttf", ''I'' => "newFont-Italic.ttf", ''BI'' => "newFont-BoldItalic.ttf", ),

  4. font-family: ''newFont''; ahora está disponible en las hojas de estilo.

  5. $mpdfObj = new mPDF('''', '''', ''newFont''); $mpdfObj->SetFont(''newFont'');

  6. Ahora se agrega tu nueva fuente.


Basado en la respuesta @ hrvoje-golcic, aquí hay una forma mejorada y menos sucia de agregar fuentes a mPDF sin editar config_fonts.php . Estoy usando Laravel, instalé mPDF usando compositor.

  1. Según lo sugerido por el autor, defina una constante llamada _MPDF_TTFONTPATH antes de inicializar mPDF con el valor como la ruta a su carpeta ttfonts (esta constante existe desde al menos 5.3).
  2. Copie la carpeta vendor/mpdf/mpdf/ttfonts a una ubicación que controle (fuera de la carpeta del proveedor).
  3. Agregue sus fuentes personalizadas a esa carpeta junto con las demás.
  4. Agregue su configuración a la propiedad fontdata en la instancia de mPDF .

Cabezas : La carpeta ttfonts tiene alrededor de 90 MB, por lo que todavía puede haber una manera mejor, pero tienes que copiar todas las fuentes ya que la configuración original las agrega. Vea la alternativa del script del compositor en la parte inferior de esta respuesta.

IMPORTANTE: la familia de fuentes CSS se transformará en minúsculas + espacios para que "Source Sans Pro" se convierta en sourcesanspro.

Aquí hay un ejemplo:

if (!defined(''_MPDF_TTFONTPATH'')) { // an absolute path is preferred, trailing slash required: define(''_MPDF_TTFONTPATH'', realpath(''fonts/'')); // example using Laravel''s resource_path function: // define(''_MPDF_TTFONTPATH'', resource_path(''fonts/'')); } function add_custom_fonts_to_mpdf($mpdf, $fonts_list) { $fontdata = [ ''sourcesanspro'' => [ ''R'' => ''SourceSansPro-Regular.ttf'', ''B'' => ''SourceSansPro-Bold.ttf'', ], ]; foreach ($fontdata as $f => $fs) { // add to fontdata array $mpdf->fontdata[$f] = $fs; // add to available fonts array foreach ([''R'', ''B'', ''I'', ''BI''] as $style) { if (isset($fs[$style]) && $fs[$style]) { // warning: no suffix for regular style! hours wasted: 2 $mpdf->available_unifonts[] = $f . trim($style, ''R''); } } } $mpdf->default_available_fonts = $mpdf->available_unifonts; } $mpdf = new mPDF(''UTF-8'', ''A4''); add_custom_fonts_to_mpdf($mpdf); $mpdf->WriteHTML($html);

Script de post-instalación del compositor

En lugar de copiar todas las fuentes y agregarlas a git, una práctica solución que utiliza una secuencia de comandos posterior a la instalación del compositor puede hacer eso por usted.

Antes que nada, asegúrate de que la carpeta donde deseas copiar las fuentes existe, y crea un .gitignore en ella, con los siguientes contenidos:

* !.gitignore !SourceSansPro-Regular.ttf !SourceSansPro-Bold.ttf

Esto ignorará todo excepto el archivo .gitignore y las fuentes que desea agregar.

A continuación, agregue los siguientes scripts a su archivo composer.json :

"scripts": { "post-install-cmd": [ "cp -f vendor/mpdf/mpdf/ttfonts/* resources/fonts/" ], "post-update-cmd": [ "cp -f vendor/mpdf/mpdf/ttfonts/* resources/fonts/" ] }

Notas

Esto fue probado para trabajar con 6.1.
En 7.x, el autor implementó una forma elegante de agregar fuentes externas.


Hay otra forma "sucia" de agregar fuentes dinámicamente en el tiempo de ejecución a los archivos lib. Esta fue mi solución porque no pude modificar el archivo config_fonts.pdf ya que estaba en el proveedor / archivos y se sobrescribía en la actualización de la biblioteca.

function add_custom_fonts_to_mpdf($mpdf, $fonts_list) { // Logic from line 1146 mpdf.pdf - $this->available_unifonts = array()... foreach ($fonts_list as $f => $fs) { // add to fontdata array $mpdf->fontdata[$f] = $fs; // add to available fonts array if (isset($fs[''R'']) && $fs[''R'']) { $mpdf->available_unifonts[] = $f; } if (isset($fs[''B'']) && $fs[''B'']) { $mpdf->available_unifonts[] = $f.''B''; } if (isset($fs[''I'']) && $fs[''I'']) { $mpdf->available_unifonts[] = $f.''I''; } if (isset($fs[''BI'']) && $fs[''BI'']) { $mpdf->available_unifonts[] = $f.''BI''; } } $mpdf->default_available_fonts = $mpdf->available_unifonts; }

Asegúrese de proporcionar rutas de fuentes relativas a ttfonts/ dir de ttfonts/

IMPORTANTE: la familia de fuentes CSS se transformará en minúsculas + espacios para que "Source Sans Pro-Regular" se convierta en sourcesanspro-regular

Por ejemplo, aquí estoy agregando 2 fuentes y 3 archivos de fuentes porque otras fuentes tienen una versión regular y en negrita:

$mpdf = new mPDF(''utf-8'', ''A4'', '''', '''', 20, 15, 50, 25, 10, 10); $custom_fontdata = array( ''sourcesanspro-regular'' => array( ''R'' => "../../../../wms/hr_frontend/job/internet/fonts/SourceSansPro-Regular/SourceSansPro-Regular.ttf" // use ''R'' to support CSS font-weight: normal // use ''B'', ''I'', ''BI'' and etc. to support CSS font-weight: bold, font-style: italic, and both... ), ''someotherfont'' => array( ''R'' => "../../../../wms/hr_frontend/job/internet/fonts/someotherfont.ttf", // In CSS font-weight: normal ''B'' => "../../../../wms/hr_frontend/job/internet/fonts/someotherfont-bold.ttf" // In CSS font-weight: bold ) ); add_custom_font_to_mpdf($mpdf, $custom_fontdata); $mpdf->WriteHTML($html);

Esto fue para mpdf 5.x pero con suerte también funciona para 6.x. ¿Alguien lo intentó?



No es necesario mostrar los errores en la pantalla. Vea todos los errores y advertencias en el archivo de registro como "error.log" de su servidor php + apache (?). Le ayuda a encontrar y resolver el problema según el mensaje en el archivo de registro.

En cualquier caso, debería utilizar las fuentes recomendadas: consulte el manual de mPDF.

Probablemente, necesita convertir las fuentes TrueType en el formato adecuado de MPDF. ( http://mpdf1.com/manual/index.php?tid=409&searchstring=fonts )