Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PDFtk: Formularfelder füllen (https://www.delphipraxis.net/213550-pdftk-formularfelder-fuellen.html)

hoika 16. Aug 2023 12:24

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?

paule32.jk 16. Aug 2023 14:12

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.
PDF-Test-Projekt

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

punktl 16. Aug 2023 15:36

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:
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.
Vielleicht hilft es Dir.

Peter

hoika 16. Aug 2023 17:23

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

himitsu 16. Aug 2023 23:01

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.

ULIK 17. Aug 2023 08:32

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 13:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz