![]() |
PDFtk: Formularfelder füllen
Hallo,
ich will hier weg von QuickPDF. Früher hatte ich mal mit PDFtk "gespielt", also FDF-Datei erzeugen pdftk.exe 1.pdf generate_fdf output 1.fdf Die 1.fdf sieht dann etwa so aus: %FDF-1.2 %âãÏÓ 1 0 obj << /FDF << /Fields [ << /V (þÿ) /T (þÿ N A M E) >> << Die þÿ stehen wirklich so drin, unter Cmd (type) ist es eine Quadrat. Mein Kenner heißt aber <NAME>, d.h. die spitzen Klammern sind weg und die Leerzeichen zwischen kommen auch nicht von mir. Ein pdftk.exe 1.pdf fill_form 1.fdf output 2.pdf erzeugt dann zwar die 2.pdf, aber die Felder sind nicht gefüllt. Ich benutze allerdings eine alte Version von 2011. Was nun? |
AW: PDFtk: Formularfelder füllen
Hallo,
es gibt einen ISO Standard für PDF in mehreren Versionen, der im Netz abgerufen werden kann. Mit Hilfe dieser Spezifikationen habe ich mal ein kleines Tool - naja um ehrlich zu sein, ein manuelles Mini-Projekt gebastelt, das unter meinen github.com Account gesaugt werden kann. Es handelt sich hierbei um eine PDF-Datei, die Text anzeigt. ![]() Schau Dir dazu die PDF im Browser und dann mal per Notepad.exe an. Viel Spaß In Deinen Fall würde ich sagen, dass das Encoding nicht stimmt. Zum Beispiel mal UTF-8 als ASCII oder umgedreht beides zusammen als Datei gespeichert (möglicherweise wegen 2 offene Instanzen des gleichen Dokuments in unterschiedlichen Programmen). Grüße paule32 |
AW: PDFtk: Formularfelder füllen
Moin,
ich nutze dafür PDFtk 2.02 (von 2014) und da funktioniert das wunderbar. In Deinem Fall scheint, wie schon vermutet, das Encoding falsch zu sein. Ich hatte mir damals eine Klasse zum Erzeugen der fdf-Datei geschrieben.
Code:
Vielleicht hilft es Dir.
unit classPDFData;
interface uses Classes, SysUtils, StdCtrls; type TPDFData = class constructor Create(); private sl: TStringList; fFileName: string; protected procedure WriteHeader; procedure WriteFooter; public property FileName: string read fFileName write fFileName; procedure AddField(FieldName: string; FieldValue: string); function SaveFile(): Boolean; end; implementation { TPDFData } procedure TPDFData.AddField(FieldName, FieldValue: string); begin sl.Add('<</T(' + FieldName + ')/V(' + FieldValue + ')>>'); end; constructor TPDFData.Create(); begin fFileName := ''; sl := TStringList.Create; WriteHeader; end; function TPDFData.SaveFile: Boolean; begin Result := False; if fFileName > '' then begin WriteFooter; try if FileExists(fFileName) then DeleteFile(fFileName); sl.SaveToFile(fFileName); Result := True; finally sl.Clear; end; end; end; procedure TPDFData.WriteFooter; begin sl.Add(']'); sl.Add('>>'); sl.Add('>>'); sl.Add('endobj'); sl.Add('trailer'); sl.Add('<</Root 1 0 R>>'); sl.Add('%%EOF'); end; procedure TPDFData.WriteHeader; begin sl.Add('%FDF-1.2'); sl.Add('1 0 obj'); sl.Add('<</FDF<</Fields['); end; end. Peter |
AW: PDFtk: Formularfelder füllen
Hm,
Encoding, hm. Ich lasse mir ja die FDF von PDFtk erzeugen. Und schon da steht dieses komische Zeichen drin. Vielleicht ist mein Version wirklich zu alt. Die Kennerersetzung per QuickPDF klappt ja, dann sollte die PDF doch in Ordnung sein? Mal schauen. Danke |
AW: PDFtk: Formularfelder füllen
Das ist ein Unicode-BOM,
um zu sagen, dass die einzelnen Bezeichner/Texte UTF-16 sind. Wusste garnicht, dass es dort erlaubt ist. Also wie immer: Wer eine Binär-Datei als Text behandelt, hat es nicht anders verdient, wenn er/sie/es dafür eine gewischt bekommt und es schön knallt. |
AW: PDFtk: Formularfelder füllen
Ich hab die "aktuelle" 2.02 von PDFtk server installiert und da wird in das FDF File keine Unicode-BOM reingeschrieben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz