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:
- Descarga el archivo zip de la fuente y descomprímelo.
- Agregue nuevos
newFont.ttf
fuentenewFont.ttf
a esta carpeta de ubicación/mpdf/ttfonts
. 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", ),
font-family: ''newFont'';
ahora está disponible en las hojas de estilo.$mpdfObj = new mPDF('''', '''', ''newFont''); $mpdfObj->SetFont(''newFont'');
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.
- Según lo sugerido por el autor, defina una constante llamada
_MPDF_TTFONTPATH
antes de inicializarmPDF
con el valor como la ruta a su carpetattfonts
(esta constante existe desde al menos 5.3). - Copie la carpeta
vendor/mpdf/mpdf/ttfonts
a una ubicación que controle (fuera de la carpeta del proveedor). - Agregue sus fuentes personalizadas a esa carpeta junto con las demás.
- Agregue su configuración a la propiedad
fontdata
en la instancia demPDF
.
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 dettfonts/
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ó?
Mpdf agregar fuente Arial
Descargar archivo de fuente: https://github.com/JotJunior/PHP-Boleto-ZF2/blob/master/public/assets/fonts/arial.ttf
Pegue el archivo arial.ttf en mpdf / ttfonts
Abra config_fonts.php y el siguiente código con fontdata array
"arial" => array (''R'' => "arial.ttf",),
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 )