OBS/Makros und Scripting/Allgemeines/Klassen/PDF Verarbeitung/TOBS PDF
Struktur
Variablen
oPDFDoc
Definition:
oPDFDoc : TgtPDFDocument;
Erklärung:
das geladene Dokument.
Methoden
Create
Definition:
constructor Create(oxDB:TxDB);
Erklärung:
Erstellt eine Instanz für das Objekt TOBS_PDF.
Beispiel:
oPDF := oPDF := TOBS_PDF.Create(oDB);
Destroy
Definition:
destructor Destroy();
Erklärung:
gibt die Instanz und alle Internen Objekte für das Objekt TOBS_PDF im Speicher wieder frei.
Beispiel:
oPDF.Free;
LoadFromFile
Definition:
function LoadFromFile(const cFileName: string; cPassword:String=''):Boolean;
Erklärung:
Lädt die angegeben PDF-Datei ein
Beispiel:
oPDF.LoadFromFile('c:\MusterEinfach.pdf');
SaveToFile
Definition:
procedure SaveToFile(const cFileName:string; lIncremental:Boolean=False; lAutoReload:Boolean=False);
Erklärung:
Speichert die geladene PDF-Datei unter einen neuen Namen ab.
lIncremental: Speichert nur die Teile des Dokuments, die geändert wurden.
lAutoReload: Lädt das gespeicherte Dokument ein.
Beispiel:
oPDF.SaveToFile('c:\MusterEinfach_Neu.pdf');
IsLoaded
Definition:
function IsLoaded():Boolean;
Erklärung:
prüft ob eine Datei geladen wurde.
Beispiel:
if oPDF.IsLoaded() then begin
end;
PageCount
Definition:
function PageCount():Integer;
Erklärung:
gibt die Anzahl der Seiten zurück.
Beispiel:
nSeiten := oPDF.PageCount();
PageSizeHeight
Definition:
function PageSizeHeight(nPageNo:Integer; Const cEnum:String):Double;
Erklärung:
gibt die Höhe der angegebenen Seiten zurück.
cEnum: Einheit der Rückgabe
Mögliche Werte: muPixels, muPoints, muInches, muMM, muTwips
Beispiel:
nHeight := oPDF.PageSizeHeight(1, 'muMM');
PageSizeWidth
Definition:
function PageSizeWidth(nPageNo:Integer; Const cEnum:String):Double;
Erklärung:
gibt die Breite der angegebenen Seiten zurück.
cEnum: Einheit der Rückgabe
Mögliche Werte: muPixels, muPoints, muInches, muMM, muTwips
Beispiel:
nWidth := oPDF.PageSizeWidth(1, 'muMM');
SetMeasurementUnit
Definition:
procedure SetMeasurementUnit(cUnit:String);
Erklärung:
Setzt die Maßeinheit für die Verarbeitung.
Mögliche Einheiten: muPixels, muPoints, muInches, muMM, muTwips
Beispiel:
oPDF.SetMeasurementUnit('muInches');
GetMeasurementUnit
Definition:
function GetMeasurementUnit():String;
Erklärung:
Gibt die aktuelle Maßeinheit zurück.
Mögliche Einheiten: muPixels, muPoints, muInches, muMM, muTwips
Beispiel:
cUnit := oPDF.GetMeasurementUnit();
InsertBlankPageAt
Definition:
procedure InsertBlankPageAt(nPageNumber:Integer; nPageWidth:Double; nPageHeight:Double);
Erklärung:
Fügt eine leere Seite mit definierter Höhe und Breite an der angegeben Seite ein
Beispiel:
oPDF.InsertBlankPageAt(2, oPDF.PageSizeWidth(1, oPDF.GetMeasurementUnit()), oPDF.PageSizeWidth(1, oPDF.PageSizeHeight()));
ExtractText
Definition:
function ExtractText(const cPageRange:String; lPageBreak:Boolean):TStringList;
Erklärung:
liest den Text der angegeben Seiten aus.
Beispiel:
oStringList := oPDF.ExtractText('1-2', True);
ExtractTextFormatted
Definition:
function ExtractTextFormatted(nPageNo:Integer):TStringList;
Erklärung:
liest den Formatierten Text der angegeben Seite aus.
Beispiel:
oStringList := oPDF.ExtractTextFormatted(1);
AddPDFFiles
Definition:
procedure AddPDFFiles(const oList:TStringList);
Erklärung:
Fügt in oList definierte PDF Dateien (Pfad + Dateiname) hinzu.
Beispiel:
oList.Add('c:\MusterEinfach_Merge.pdf')
oPDF.AddPDFFiles(oList);
TextOut
Definition:
procedure TextOut(const cHtmlText:String; x:integer; y:Integer);
Erklärung:
Schreibt HTML Formatierten Text an die definierte Stelle.
Beispiel:
oPDF.TextOut('<B>TEST</B>', 50, 50);
GetPlatzhalter
Definition:
function GetPlatzhalter() : TStringList;
Erklärung:
gibt alle enthaltenen Platzhalter zurück.
Rückgabe Format: Name + ';' + Typ + ';' + Content
Typen: ftText, ftCheckBox, ftRadio, ftButton, ftSignature, ftChoice, ftListBox, ftComboBox
Beispiel:
oString := oPDF.GetPlatzhalter();
SetPlatzhalter
Definition:
procedure SetPlatzhalter(cPlatzhalter: array of String; cText: array of String);
Erklärung:
Setzt cPlatzhalter mit definierten cText
Datei muss danach gespeichert werden
Beispiel:
oPDF.SetPlatzhalter([Token(oString.Strings[0], ';', 1)], [Token(oString.Strings[0], ';', 3) + 'TEST']);
GetAnmerkung
Definition:
function GetAnmerkung(nPage: Integer) : TStringList;
Erklärung:
gibt alle enthaltenen Kommentare/Anmerkungen der angebenen Seite zurück.
Rückgabe Format: Name + ';' + Content
Beispiel:
oString := oPDF.GetAnmerkung(1);
SetAnmerkung
Definition:
procedure SetAnmerkung(nPage: Integer; cPlatzhalter: array of String; cText: array of String);
Erklärung:
Setzt cPlatzhalter mit definierten cText auf der anegebenen Seite
Datei muss danach gespeichert werden
Beispiel:
oPDF.SetAnmerkung([Token(oString.Strings[0], ';', 1)], [Token(oString.Strings[0], ';', 2) + 'TEST']);
SetEncryption
Definition:
procedure SetEncryption(const cOwnerPass:String; const cUserPass:String; const cEncryptionLevel:String; const cPermissions:String);
Erklärung:
Setzt die Berechtigungen
cEncryptionLevel: el40bit, el128bit
cPermissions: AllowCopy, AllowModify, AllowPrint, AllowAnnotation, AllowFormFill, AllowAccessibility, AllowDocAssembly, AllowHighResPrint
Beispiel:
oPDF.SetEncryption('123', '123', 'el128bit', 'AllowCopy, AllowModify');
ShowPDF
Definition:
procedure ShowPDF(const cFileName:String);
Erklärung:
öffnet die PDF Datei
Beispiel:
ShowPDF('c:\MusterEinfach_neu.pdf');
WaterMarkText
Definition:
procedure WaterMarkText(const cText:String; const cPageRange:String; oFont:TFont);
Erklärung:
Schreibt ein Wasserzeichen als Text auf die angegebenen Seiten
Beispiel:
oFont := TFont.Create();
oFont.Name := 'Times New Roman';
oFont.Size := 40;
oPDF.WaterMarkText('OBS DEMO','1-9',oFont);
WaterMarkBitmap
Definition:
procedure WaterMarkBitmap(oBitMap:TBitmap; const cPageRange:String; oFont:TFont);
Erklärung:
Schreibt ein Wasserzeichen als Bild auf die angegebenen Seiten
Beispiel:
oBitMap := TBitmap.Create();
oBitmap.LoadFromFile('c:\Temp.bmp');
oFont := TFont.Create();
oFont.Name := 'Times New Roman';
oFont.Size := 40;
oPDF.WaterMarkText(oBitMap ,'1-9',oFont);
GetPDFInfo
Definition:
procedure GetPDFInfo(var cTitel : String;
var cAuthor : String;
var cSubject : String;
var cKeywords : String;
var cCreator : String;
var cProducer : String;
var cCreationDate : String;
var cModDate : String);
Erklärung:
Gibt Informationen über das PDF zurück
Die übergebenen Variablen beinhalten dabei die Informationen
Beispiel:
procedure GetPDFInfo(cTitel,
cAuthor,
cSubject,
cKeywords,
cCreator,
cProducer,
cCreationDate,
cModDate);
SetPDFInfo
Definition:
procedure SetPDFInfo(Const cTitel : String;
Const cAuthor : String;
Const cSubject : String;
Const cKeywords : String;
Const cCreator : String;
Const cCreationDate : String;
Const cModDate : String);
Erklärung:
Setzt Informationen über das PDF neu
Beispiel:
procedure SetPDFInfo(cTitel,
cAuthor,
cSubject,
cKeywords,
cCreator,
cProducer,
cCreationDate,
cModDate);
Beispiele
Setzen von Platzhaltern
function StartProc():Boolean;
var oPDF : TOBS_PDF;
cBuffer : String;
i : Integer;
oString : TStringList;
begin
Result := False;
cBuffer := 'c:\MusterEinfach.pdf';
oPDF := TOBS_PDF.Create(oDB);
if oPDF.LoadFromFile(cBuffer) then begin
oString := oPDF.GetPlatzhalter();
for i := 0 to oString.Count-1 do begin
DebugLine(oString.Strings[i]);
end;
oPDF.SetPlatzhalter([Token(oString.Strings[0], ';', 1)], [Token(oString.Strings[0], ';', 3) + 'TEST']);
oPDF.SaveToFile('c:\MusterEinfachTest.pdf', False, True);
MyFreeAndNil(oString);
end;
MyFreeAndNil(oPDF)
end;
Hinzufügen von Dokumenten
Const In_PDF = 'c:\OBS\TEMP\Server.pdf'; //Reine Bitmap PDF
Out_PDF = 'c:\OBS\TEMP\Neu_VERTRAG.pdf'; //Text PDF
Vertrag_PDF = 'c:\OBS\TEMP\DSGVO_VERTRAG.PDF'; //Text PDF
Water_PDF = 'c:\OBS\TEMP\WATER_VERTRAG.PDF'; //Text PDF
Merge_PDF = 'c:\OBS\TEMP\Merge.PDF'; //Gemischt
Add_PDF = 'c:\OBS\TEMP\Add.PDF';
procedure StartProc();
var oPDF : TOBS_PDF;
oList : TStringList;
oOList : TStringList;
oFont : TFont;
i : Integer;
begin
oPDF := TOBS_PDF.Create(oDB);
oList := TStringList.Create();
oOList := TStringList.Create();
oFont := TFont.Create();
oFont.Name := 'Times New Roman';
oFont.Size := 40;
//oFont.Style := [];
FErase(Add_PDF);
FErase(Merge_PDF);
FErase(Out_PDF);
oPDF.LoadFromFile(Vertrag_PDF,'');
DebugLine('.................Start................................');
if (oPDF.IsLoaded()) then begin
DebugLine('Datei '+In_PDF+' erfolgreich geladen!');
oOList := oPDF.ExtractText('', True);
for i:=0 to Min(oOList.Count-1,10) do begin
DebugLine(zStr(i,4)+' '+oOList.Strings[i]);
end;
oPDF.WaterMarkText('OBS DEMO','',oFont);
oPDF.WaterMarkText('OBS DEMO','1-999',NIL);
oPDF.WaterMarkText('OBS DEMO','1-9',oFont);
oPDF.SaveToFile(Out_PDF);
if (IsFile(Out_PDF)) then begin
DebugLine('Datei '+Out_PDF+' erfolgreich gespeichert!');
end;
oList.Add(In_PDF);
oList.Add(Vertrag_PDF);
oPDF.MergePDFFiles(oList,Merge_PDF);
if (IsFile(Merge_PDF)) then begin
DebugLine('Datei '+Merge_PDF+' erfolgreich gespeichert!');
MyFreeAndNil(oPDF);
oPDF.ShowPDF(Merge_PDF);
end;
end;
MyFreeAndNil(oPDF);
oList.Clear();
oPDF := TOBS_PDF.Create(oDB);
oList.Add(In_PDF);
oList.Add(Vertrag_PDF);
oPDF.AddPDFFiles(oList);
if (oPDF.IsLoaded()) then begin
oPDF.SaveToFile(Add_PDF);
if (IsFile(Out_PDF)) then begin
DebugLine('Datei '+Add_PDF+' erfolgreich gespeichert!');
end
end;
MyFreeAndNil(oPDF);
oList.Clear();
oPDF := TOBS_PDF.Create(oDB);
DebugLine('.................End...............................');
MyFreeAndNil(oPDF);
MyFreeAndNil(oList);
MyFreeAndNil(oFont);
end;
Automatisch Mail-Zuordnung
In diesem Beispiel als Makroaufruf in einer E-Mail-Regel.
function StartProc(cMailNr: String):Boolean;
var oPDF : TOBS_PDF;
cAnhang : String;
cBuffer : String;
i : Integer;
oString : TStringList;
cBestNr : String;
cTmpPfad : String;
lFound : Boolean;
begin
Result := False;
//Anhänge ermitteln
//Diese werden dabei in ein Temp Verzeichnis extrahiert
cAnhang := ExtractAnhang(oDB, '', cMailNr);
cTmpPfad := '';
//alle Anhänge durch gehen
for i := 1 to NumToken(CRLF, cAnhang) do begin
cBuffer := Token(Token(cAnhang, CRLF, i), ';', 1);
if empty(cTmpPfad) then begin
cTmpPfad := ExtractFilePath(cBuffer);
end;
if Lower(ExtractFileExt(cBuffer)) = '.pdf' then begin
//PDF Datei Laden
oPDF := TOBS_PDF.Create(oDB);
if oPDF.LoadFromFile(cBuffer) then begin
//Text extrahieren
oString := oPDF.ExtractText('1-' + aStr(oPDF.PageCount), true);
//Text prüfen
if inStr('62972455', oString.Text) then begin
cBestNr := AllTrim(Token(Token(oString.Text, '62972455' ,2), CRLF, 1));
cBestNr := RightStr(cBestNr, 17);
cBestNr := LeftStr (cBestNr, 7);
lFound := False;
if (not(empty(cBestNr))) and (DB_LSeek(oDB, 'BESTELL', 'a_nr = ' + DB_SQLVal(cBestNr))) then begin
lFound := True;
end else begin
lFound := False;
end;
if lFound then begin
//E-Mail der Bestellung zuordnen
AddBrief(oDB, //DB
'4', //Typ (4=Email)
DMS_TYP_BESTELLUNG, //DMSTYP
INFOTYP_ANKOMMENDE_E_MAIL, //Info-Typ //INFOTYP_ANKOMMENDE_E_MAIL,INFOTYP_ABGEHENDE_E_MAIL
cBestNr, //Referenz
'Automatische Zuordnung', //Bemerkung
cBestNr + ' Tekno Rechnung', //Betreff
'', //Projektnr
oSystem.cSachbearbeiter, //Sachbearbeiter
'', //DokumentenID
cMailNr); //EMailNr
//Datei Drucken
TPDFUtils_PrintPDF(oDB, cBuffer, '005');
Result := True;
end;
end;
MyFreeAndNil(oString);
end;
MyFreeAndNil(oPDF);
end;
end;
//Temp Verzeichnis und Inhalt wieder löschen
sleep(5000);
if not(empty(cTmpPfad)) and InStr('\TEMP\', cTmpPfad) then begin
DirRemoveExt(cTmpPfad);
end;
end;
DMS Macro Funktionen
//------------------------------------------------------------------------------
// Unit Name: Beispiel DMS
// Author: JB
// Date: 27-Mrz-2020
//
// cDokNr : String;
// cGruppe : String;
// cEAN : String;
// cVorgNr : String;
// cDMSTyp : String;
// cOCRText : String;
// cRefNr : String;
// cTitel : String;
// cProjNr : String;
// cPsNr : String;
// dADatum : TDateTime;
// oDMSBitmap : TBitmap;
// oListDokNr : TStringList;
// oListDokFileName : TStringList;
// oListDokArchiv : TStringList;
//
// function GetDokNr(const cDokNr:String):Boolean;
// function FindVorgang(const cxDMSTyp:String; const cxVorgNr:String):Boolean;
// function FindVorgangLike(const cxDMSTyp:String; const cxVorgNr:String):Boolean;
// function FindGruppe(const cxGruppe:String):Boolean;
// function LoadPreviewBMP(const cDokNr:String):Boolean;
// function LoadFullBMP(const cDokNr:String):Boolean;
// function SearchDokument(const cDokArt : String; //Durch Komma gestennt
// const cProjekt : String; //Durch Komma gestennt
// const cPsNr : String; //Durch Komma gestennt
// const cSBNr : String; //Durch Komma gestennt
// const cStatus : String; //Durch Komma gestennt
// const cFullText : String; //Durch Komma gestennt
// cFullField : String; //O=OcrText,T=Titel,B=Bemerkung,M=Man-OcrText,A=AutoText;E=EAN
// lAndFT : Boolean; //Bei True And Verknüpfung beim Volltext
// nOriginale : integer; //1 Keine Originale, 2 Nur Originale, Empfholen 1)
// nVonDat : TDateTime; //0 keine Suche nVonDat
// nBisDat : TDateTime //0 keine Suche nBisDat
// ):Boolean;
//
// Achtung: oListDokNr, oListDokFileName, oListDokArchiv werden bei
// GetDokNr, FindVorgang, FindGruppe neu gesetzt
// Werden diese Stringlisten gebraucht muss mit einem
// 2. TOBS_DMS Objekt gearbeitet werden!
// FindVorgang findet nur QR-Codes in DMS Vorgängen
// FindVorgangLike findet Vorgangs-Nummern und berücksichtigt die Manuellen Verknüpfungen dabei
//------------------------------------------------------------------------------
Beispiel Scripter
procedure StartProc();
var oDMS : TOBS_DMS;
i : Integer;
begin
oDMS := TOBS_DMS.Create(oDB);
oDMS.GetDokNr('Y008N977LX');
DebugLine('-------------------------------------------------------------');
DebugLine(' 1 Festes Dokument ');
DebugLine('-------------------------------------------------------------');
DebugLine('cDokNr '+oDMS.cDokNr);
DebugLine('cGruppe '+oDMS.cGruppe);
DebugLine('cEAN '+oDMS.cEAN);
DebugLine('cVorgNr '+oDMS.cVorgNr);
DebugLine('cDMSTyp '+oDMS.cDMSTyp);
DebugLine('cRefNr '+oDMS.cRefNr);
DebugLine('cTitel '+oDMS.cTitel);
DebugLine('cProjNr '+oDMS.cProjNr);
DebugLine('cPsNr '+oDMS.cPsNr);
DebugLine('dADatum '+DToC(oDMS.dADatum));
DebugLine('......................................................');
for i:=0 to oDMS.oListDokNr.Count-1 do begin
DebugLine('Dok-Nr '+zStr(i,3)+' '+oDMS.oListDokNr.Strings[i]);
end;
for i:=0 to oDMS.oListDokFileName.Count-1 do begin
DebugLine('DateiName '+zStr(i,3)+' '+oDMS.oListDokFileName.Strings[i]);
end;
for i:=0 to oDMS.oListDokArchiv.Count-1 do begin
DebugLine('Archiv-Nr. '+zStr(i,3)+' '+oDMS.oListDokArchiv.Strings[i]);
end;
DebugLine('-------------------------------------------------------------');
DebugLine(' N Dokumente über Searc ');
DebugLine('-------------------------------------------------------------');
oDMS.SearchDokument('', // cDokArt Durch Komma gestennt
'', // cProjekt Durch Komma gestennt
'', // cPsNr Durch Komma gestennt
'', // cSBNr Durch Komma gestennt
'21,22', // cStatus Durch Komma gestennt
'Stadeum, 000492', // cFullText Durch Komma gestennt
'O', // cFullField O=OcrText,T=Titel,B=Bemerkung,M=Man-OcrText,A=AutoText;E=EAN
True, // lAndFT Bei True And Verknüpfung beim Volltext
1, // nOriginale 1 Keine Originale, 2 Nur Originale, Empfholen 1)
CToD('01.01.2019'), // nVonDat 0 keine Suche nVonDat
CToD('01.12.2020') // nBisDat 0 keine Suche nBisDat
);
DebugLine('cDokNr '+oDMS.cDokNr);
DebugLine('cGruppe '+oDMS.cGruppe);
DebugLine('cEAN '+oDMS.cEAN);
DebugLine('cVorgNr '+oDMS.cVorgNr);
DebugLine('cDMSTyp '+oDMS.cDMSTyp);
DebugLine('cRefNr '+oDMS.cRefNr);
DebugLine('cTitel '+oDMS.cTitel);
DebugLine('cProjNr '+oDMS.cProjNr);
DebugLine('cPsNr '+oDMS.cPsNr);
DebugLine('dADatum '+DToC(oDMS.dADatum));
DebugLine('......................................................');
for i:=0 to oDMS.oListDokNr.Count-1 do begin
DebugLine('Dok-Nr '+zStr(i,3)+' '+oDMS.oListDokNr.Strings[i]);
end;
for i:=0 to oDMS.oListDokFileName.Count-1 do begin
DebugLine('DateiName '+zStr(i,3)+' '+oDMS.oListDokFileName.Strings[i]);
end;
for i:=0 to oDMS.oListDokArchiv.Count-1 do begin
DebugLine('Archiv-Nr. '+zStr(i,3)+' '+oDMS.oListDokArchiv.Strings[i]);
end;
DebugLine('......................................................');
DebugLine('cOCRTex '+oDMS.cOCRText);
MyFreeAndNil(oDMS);
end;