OBS/Makros und Scripting/Allgemeines/Klassen/PDF Verarbeitung/TOBS PDF

Aus OBS Wiki
Zur Navigation springen Zur Suche springen


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;