Ich sehe den Fehler nur, wenn ich die Meldung von Schriftartfehlern in den Konfigurationseinstellungen einschalte. Wenn ich die Fehlerberichterstattung ausschalte, wird das PDF generiert, aber die verwendete Schriftart ist nicht Verdana.
Basierend auf der Antwort von @hrvoje-golcic finden Sie hier eine verbesserte und weniger schmutzige Methode zum Hinzufügen von Schriftarten zu mPDF ohne Bearbeitung config_fonts.php. Ich verwende Laravel, ich habe mPDF mit Composer installiert.
Definieren Sie, wie vom Autor vorgeschlagen, eine Konstante namens _MPDF_TTFONTPATH vor dem Initialisieren mPDF mit dem Wert als Pfad zu Ihrem ttfonts Ordner (diese Konstante existiert seit mindestens 5.3).
Kopiere das vendor/mpdf/mpdf/ttfonts Ordner an einen Speicherort, den Sie kontrollieren (außerhalb des Vendor-Ordners).
Fügen Sie Ihre benutzerdefinierten Schriftarten zusammen mit den anderen zu diesem Ordner hinzu.
Fügen Sie Ihre Konfiguration der hinzu fontdata Eigentum auf der mPDF Beispiel.
Kopf hoch: Das ttfonts Der Ordner hat ungefähr 90 MB, also gibt es vielleicht noch einen besseren Weg, aber Sie müssen alle Schriftarten kopieren, da die ursprüngliche Konfiguration sie hinzufügt. Siehe Composer-Skript-Alternative am Ende dieser Antwort.
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);
Composer-Nachinstallationsskript
Anstatt alle Schriftarten zu kopieren und sie zu Git hinzuzufügen, kann eine praktische Problemumgehung mit einem Composer-Nachinstallationsskript dies für Sie erledigen.
Stellen Sie zunächst sicher, dass der Ordner, in den Sie die Schriftarten kopieren möchten, vorhanden ist, und erstellen Sie eine .gitignore darin, mit folgendem Inhalt:
Dies wurde getestet, um mit 6.1 zu arbeiten.
In 7.x hat der Autor umgesetzt eine elegante Möglichkeit, externe Schriftarten hinzuzufügen.
Dies ist möglicherweise die richtige Methode zum Hinzufügen benutzerdefinierter Schriftarten, aber … wenn Sie verwenden Laravel und mPDF 7.x Der einfachste Weg wird hier erwähnt, indem benutzerdefinierte Schriftarten in mPDF 7.x hinzugefügt werden
– Ahamed Raschid
8. Februar 2019 um 6:13 Uhr
Nun, das Problem ist, dass es sehr falsch ist, Dinge in der manuell zu ändern vendor Mappe
– s3v3n
8. Februar 2019 um 12:15 Uhr
Ah ah, so lustig, dass ich die Kleinbuchstabenumwandlung nirgendwo in den Dokumenten finden konnte. Warum haben sie es getan und warum warum nicht mit einem großen roten riesigen blinkenden Haftungsausschluss im Abschnitt für benutzerdefinierte Schriftarten dokumentieren? Danke @s3v3n.
– Marek Maurizio
21. November 2019 um 10:06 Uhr
Ajai
Im Folgenden sind die Schritte zum Hinzufügen einer neuen Schriftfamilie in der mpdf-Bibliothek aufgeführt:
Laden Sie die Schriftart-Zip herunter und entpacken Sie sie.
Neue hinzufügen newFont.ttf Schriftartdatei(en) an diesen Speicherort /mpdf/ttfonts Mappe.
Bearbeiten /mpdf/config_fonts.php ODER /mpdf/src/config/FontVariables.php um einen Eintrag hinzuzufügen $this->fontdata Array für die neue(n) Schriftartdatei(en). Wie:
font-family: 'newFont'; ist jetzt in den Stylesheets verfügbar.
$mpdfObj = new mPDF('', '', 'newFont');
$mpdfObj->SetFont('newFont');
Jetzt wird Ihre neue Schriftart hinzugefügt.
Ich rate dringend von der hier beschriebenen Methode ab. Auf keinen Fall sollten Sie die Originaldateien verändern – alle Änderungen sind mit dem Update weg. So geht’s in der Originaldokumentation: mpdf.github.io/fonts-languages/fonts-in-mpdf-7-x.html
– Peter VARGA
17. Juli 2021 um 19:44 Uhr
Hrvoje Golcic
Es gibt eine andere “schmutzige” Möglichkeit, Schriftarten dynamisch zur Laufzeit neben den lib-Dateien hinzuzufügen. Dies war meine Lösung, weil ich nicht ändern konnte config_fonts.pdf Datei, da sie sich in der Datei „Vendor/Dateien“ befand und bei einer Bibliotheksaktualisierung überschrieben würde.
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;
}
Stellen Sie sicher, dass Sie Schriftartpfade relativ zu mpdfs angeben ttfonts/ dir
WICHTIG: Die CSS-Schriftfamilie wird in Kleinbuchstaben + Leerzeichen umgewandelt, sodass “Source Sans Pro-Regular” zu sourcesanspro-regular wird
Zum Beispiel füge ich hier 2 Schriftarten und 3 Schriftartdateien hinzu, weil andere Schriftarten eine normale und eine fette Version haben:
$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);
Dies war für mpdf 5.x, aber hoffentlich funktioniert es auch für 6.x. Hat jemand versucht?
Ich kann bestätigen, dass dies für den 6.x-Zweig von mPDF funktioniert hat. Danke für diesen Vorschlag, ich habe keine Ahnung, warum all diese Logik in die anfängliche Einrichtung von mpdf eingebacken ist und außerhalb davon nicht erneut ausgeführt werden kann ಠ_ಠ Es würde viele Probleme mit Schriftarten lösen! 🙂
– Jaymz
21. Dezember 2016 um 17:15 Uhr
Fügen Sie einfach eine Schriftart zu FontVariable.php hinzu
Stellen Sie sicher, dass der ttf-Dateiname mit Großbuchstaben wie beginnt Pacifico.ttf Benennen Sie dann die Schriftfamilie mit dem Beginn des Kleinbuchstabens, wie ich es oben mache. mach das zB Pazifik
und testen Sie dies jetzt einfach mit create testing php file
require_once __DIR__ . '/autoload.php';
$defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8',
'format' => 'A4'.('orientation' == 'L' ? '-L' : ''),
'orientation' => 0,
'margin_left' => 3,
'margin_right' => 3,
'margin_top' => 3,
'margin_bottom' => 0,
'margin_header' => 0,
'margin_footer' => 0,
]);
$texttt="
<html>
<p style="font-family: dejavusanscondensed;"> Text in Frutiger </p>
<p style="font-family: freeserif;"> Text in Frutiger </p>
<p style="font-family: freemono;"> Text in Frutiger </p>
<p style="font-family: freeserif;"> مرحبا بالعالم </p>
<p style="font-family: unbatang;"> 하는 바에 의하여 영장제도 </p>
<p style="font-family: centurygothic;"> Text in Frutiger </p>
<p style="font-family: pacifico;"> Text in Frutiger </p>
<p style="font-family: windsong;"> Text in Frutiger </p>
</html>";
$mpdf->WriteHTML($texttt,\Mpdf\HTMLParserMode::HTML_BODY);
$mpdf->Output();
Keine Notwendigkeit, Fehler auf dem Bildschirm anzuzeigen. Sehen Sie alle Fehler und Warnungen in der Protokolldatei wie “error.log” Ihres PHP- + Apache(?)-Servers. Es hilft Ihnen, das Problem anhand der Meldung in der Protokolldatei zu finden und zu lösen.
In jedem Fall sollten Sie empfohlene Schriftarten verwenden – siehe mPDF-Handbuch.
Hatten Sie Erfolg?
– alexej_d
5. März 2014 um 8:08 Uhr
überprüfen Sie diesen Link mpdf1.com/forum/discussion/1139/fonts-not-showing/p1
– Ajit Singh
10. Juli 2014 um 13:37 Uhr