Die Option poSubsetFont ruft bei einem Test mit "Arial" zwar den TFontSubsetter (fpTTFSubsetter.pp) auf, aber in WriteTableHeader fliegt das Ganze mit einem Overflow Error beim zusammenrechnen der checksum ab. Der berechnete w Wert geht jeweils in die xxx'xxx'xxx.
w := w or (lByte shl ((3 - (n mod 4))*8));
if n mod 4 = 3 then begin
Inc(checksum, w);
w := 0;
end;
Ohne Option poSubsetFont wird der "normale" Weg mit dem ganzen Font abgearbeitet und das PDF wird gemacht, aber halt 1.5 MB statt 46 KB wie bei einer Standardschrift.
Braucht es noch weitere Vorbereitungen nach dem Setzen der Option poSubsetFont ?
Da es vor ein paar Jahren noch kein funktionierendes PDF-Modul unter Lazarus gab, habe ich dazumal eine eigene PDF-Engin gebaut. Dabei nutzte ich ein bereits gemachtes SVG-Modul, dass wie ein Canvas funktioniert. Bei diesem SVG Modul werden alle Canvas-Funktionen zuerst in einen Speicher geschrieben und erst am Ende wird daraus die SVG Datei erstellt.
Genau gleich läuft es mit dem PDF-Modul. Dabei habe ich ein ANSI Datei geschrieben und konnte so auch die Umlaute nutzen. Und klar, mein SVG wie auch PDF-Modul können nur einfache Texte, Grafiken und Bilder einbinden. Aber ich brauche auch die Embedded-Font Funktion. Als ich sah, dass fpPDF das nun kann, versuchte ich es mit diesem Modul... mit den Problemen die hier behandelt wurden. Das fpPDF-Modul ist leider noch nicht ganz "Wasserdicht".
Habe nun das Ganze mit der aktuellsten Trunk-Version getestet.
- Umlaute gehen nun mit den PDF Standard-Schriften (ging bei der 2.2.2 nicht)
- TTF (Arial) einbinden und Anzeigen der Umlaute geht mit Trunc und ging auch bei 2.2.2
- TTF (Arial) mit Option poSubsetFont geht immer noch nicht. Der Overflow ist immer noch beim Berechnen der Checksum, einfach erst am Ende der Procedure WriteTableHeader
xos hat geschrieben: Do 18. Aug 2022, 12:46
- TTF (Arial) mit Option poSubsetFont geht immer noch nicht. Der Overflow ist immer noch beim Berechnen der Checksum, einfach erst am Ende der Procedure WriteTableHeader
Hmm, bei mir geht das. Die Datei ist ca. 30 kB gross.
Lazarus 2.3.0 (rev main-2_3-2366-g4fba69291d) FPC 3.2.2 x86_64-linux-gtk2
Wenn der Overflow noch immer da ist, Beispiel dazu und ab in den Bugtracker, falls es den Bugreport noch nicht gibt. Wenn ja Hinweis mit Beispiel, ds es noch immer nicht geht.
Und den Hinweis, das es unter Win32 Probleme gibt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
ich experimentiere gerade mit fpPDF auf Win 11 und Schriftarten. Ich habe festgestellt, dass mein erstelltes TestPDF mit der Schriftart "Arial" rund 1,8 MB groß wird, währenddessen es mit "Helvetica" nur 781 KB hat.
Das ist eine nicht unerhebliche Differenz. Worin ist die begründet? Lässt sich mit "Arial" auch eine "kleine" Dateigröße erreichen? Was muß man dafür tun?
Ich habe auch kein Problem damit Helvetica zu verwenden. So stark unterscheiden die Beiden sich nicht.
ErnstVolker hat geschrieben: So 22. Okt 2023, 13:08
Das ist eine nicht unerhebliche Differenz. Worin ist die begründet? Lässt sich mit "Arial" auch eine "kleine" Dateigröße erreichen? Was muß man dafür tun?
Helvetica ist ein PDF Standard Font, welcher jeder Reader "eingebaut" haben sollte: https://kbpdfstudio.qoppa.com/standard-14-pdf-fonts/
Bei anderen Schriftarten wie Arial muss der Font in das Dokument eingebettet werden.
Bei Arial enthält das Dokument also die Fontbeschreibung, bei Helvetica nicht, deshalb wird es wohl grösser sein.