GUI für pdftk

Eigene oder Gemeinschaftsprojekte, Klassen, Module, Codeschnipsel, HowTos, ...
Antworten
Benutzeravatar
alf17
Foriker
Beiträge: 37
Registriert: Do 7. Jun 2007, 16:46
Kontaktdaten:

GUI für pdftk

Beitrag von alf17 » Mi 30. Dez 2009, 17:39

Hallo,
wieder liegen etliche Feiertage hinter uns - und damit war genügend "Rechenzeit" verfügbar, um ein bissel zu probieren. Schon seit langem gefällt mir das Programm pdftk sehr gut, nur ist es etwas umständlich in der Bedienung. Daher habe ich unter Gambas mal eine GUI dafür zusammengestellt. Um diese zu verwenden, müssen pdftk und ImageMagick installiert sein! Wer es probieren möchte, die GUI "Hermitderpdf" liegt auf http://www.ansichtssache-ev.de/?Willkommen:Der_Verein:Archiv zum download. Natürlich on your own risk!
Ich würde mich freuen, wenn auch kritische Anmerkungen und Tips eintreffen!

Bild

[img]http://www.ansichtssache-ev.de/transfer/zusammenfügen.jpeg[/img]

Bild

Bild

Bild

Viele Grüße Alf
Zuletzt geändert von alf17 am So 3. Jan 2010, 14:24, insgesamt 1-mal geändert.

jo42
Foriker
Beiträge: 29
Registriert: Mi 2. Dez 2009, 08:56

Re: GUI für pdftk

Beitrag von jo42 » Mi 30. Dez 2009, 19:11

nnnnnnnnnnnn
Zuletzt geändert von jo42 am Mo 5. Jul 2010, 23:56, insgesamt 2-mal geändert.

Benutzeravatar
alf17
Foriker
Beiträge: 37
Registriert: Do 7. Jun 2007, 16:46
Kontaktdaten:

Re: GUI für pdftk

Beitrag von alf17 » Mi 30. Dez 2009, 19:20

Nochmal Hallo,
ich hatte vorhin leider den Code vergessen :( Nun - hier ist er:

Code: Alles auswählen

' Gambas class file

PUBLIC OrtderPDF AS String                'Pfad zur Pdf-Datei inkl. vollständiger Dateiname
PUBLIC LeseDir AS String                  'Pfad zum gewählten Lese-Verzeichnis
PUBLIC DateiGroesse AS Integer            'Dateigröße Pdf-Datei
PUBLIC DateiGroesseDazu AS Integer        'Dateigröße Pdf-Datei für Listbox
PUBLIC LetzterZugriff AS Date             'Letzter Pdf-Zugriff
PUBLIC PDFDateiName AS String             'Dateiname der Pdf-Datei mit Endung
PUBLIC PDFDateiNameNacksch AS String      'Dateiname der Pdf-Datei ohne Endung
PUBLIC InfoText AS String                 'Inhalt der Info-Datei der gelesenen pdf-Datei

PUBLIC ReadyLesen AS Boolean              'eine pdf fertig eingelesen
PUBLIC Infoanaus AS Boolean               'Anzeigesteuerung der Datei-Info-Einblendung
PUBLIC InfoanausWZ AS Boolean             'Anzeigesteuerung der Datei-Info-Einblendung

PUBLIC ZielVerz AS String                 'Zielverzeichnis der zu speichernden pdf's
PUBLIC TrennModus AS Integer              'Art der Zerstückelung - Werte: 1, 2, 3

PUBLIC DazuPDF AS String                  'Pfad zur Pdf-Datei inkl. vollständiger Dateiname
PUBLIC AuswahlListbox AS Integer          'Index der ausgewählten pdf-Datei in der Listbox
PUBLIC PSWDZF AS String                   'Passwort der zusammengefügten PDF
PUBLIC ZielVerzZF AS String               'Zielverzeichnis der zusammengesetzten PDF
PUBLIC NeueZFpdf AS String                'Dateiname der Zusammengesetzen PDF

PUBLIC PdfNeuWZ AS String                 'neue PDF, die mit Wasserzeichen/Hintergrund versehen werden soll
PUBLIC WZ AS String                       'Pfad + Name des Wasserzeichens-pdf's
PUBLIC HG AS String                       'Pfad + Name des Hintergrund-pdf's

PUBLIC RPdfOrt AS String                  'neue PDF, die rotieren soll
PUBLIC PDFDateiNameR AS String            'Einzeldateiname aus Einlese-Pfad "rotier-pdf" extrahiert
PUBLIC PDFDateiNameRNacksch AS String     'Name dieser Pdf-Datei ohne Endung
PUBLIC LeseDirR AS String                 'Pfad zum gewählten Lese-Verzeichnis der zu rotierenden pdf

PUBLIC OrtderPDFK AS String               'Pfad zur sonstiges-Pdf-Datei inkl. vollständiger Dateiname
PUBLIC PDFDateiNameK AS String            'Einzeldateiname aus Einlese-Pfad "sonstiges-pdf" extrahiert
PUBLIC PDFDateiNameNackschK AS String     'Name dieser Pdf-Datei ohne Endung
PUBLIC LeseDirK AS String                 'Pfad zum gewählten Lese-Verzeichnis der "Sonstiges"- pdf
PUBLIC InfoanausK AS Boolean              'Anzeigesteuerung der Datei-Info-Einblendung
PUBLIC ReadyLesenK AS Boolean             'eine pdf sonstiges fertig eingelesen         

'.............Ende der Public-Deklaration............................................................................

PUBLIC SUB Form_Open() '.....................Programmstartwerte setzen...............

LabelDateigroesse.Visible = FALSE
LabelZugriff.Visible = FALSE
TextAreaH2.Hide
LabelSeitenzahl.Visible = FALSE
ButtonOK.Enabled = FALSE
TextBoxZPWD.Enabled = FALSE
ButtonPSWDOK.Enabled = FALSE
LabelPSWDgesetzt.Visible = FALSE
LabelRG.Visible = FALSE
LabelRS.Visible = FALSE
LabelKG.Visible = FALSE
LabelKzug.Visible = FALSE
LabelKS.Visible = FALSE

         ButtonKKey.Enabled = FALSE


NeueZFpdf = "neuepdf"
WZ = Application.Path & "/tux01.pdf"
HG = Application.Path & "/bg.pdf"

    ReadyLesen = FALSE      '....noch keine Datei eingelesen
    ReadyLesenK = FALSE      '....noch keine Datei eingelesen
    Infoanaus = TRUE        '....Infodatei splitten kann angezeigt werden
    InfoanausWZ = TRUE      '....Infodatei Wasserzeichen kann angezeigt werden
    InfoanausK = TRUE       '....Infodatei sonstiges kann angezeigt werden

PictureBoxVorschau.Picture = Picture["./pdf-icon.jpg"]
TextBoxAnzeige.Text = " Hier werden pdf's zerstückelt"

SpinBoxBis.Value = 0
TextAreaWZ.Hide
TrennModus = 1      '...burst - jede Seite einzeln

ZielVerzZF = User.Home & "/" '...Standard-Verzeichnis für zu speichernde zusammengesetzte pdf's

Dialog.Path = User.Home

END

PUBLIC SUB ButtonQuelle_Click()                 ':::::::::::::::::::pdf öffnen:::::::::::::::::::::::::::::.

DIM PDFVorschauShell AS String        'Shellbefehlsstring zum Erzeugen des Vorschaubildes
DIM PDFVorschaubild AS Picture        'erzeugtes Vorschaubild

DIM PDFInfoShell AS String            'Shellbefehlsstring zum Auslesen der pdf-Datei-info
DIM RechtsvonSeitenzahl AS String     'String Seitenzahl + rechts der Seitenanzahl
DIM Seitenzahl AS String              'Anzahl der Seiten in der PDF
DIM SeitenzahlZahl AS Integer         'Ziffernwert der Seitenanzahl


'Startwerte:
LabelDateigroesse.Visible = FALSE
LabelZugriff.Visible = FALSE
ButtonOK.Enabled = FALSE
SpinBoxBis.Value = 0

 'Filter für anzuzeigende Dateien
  Dialog.Filter = ["*.pdf; *.PDF", "PDF-Dateien"]
  Dialog.Title = "Zu öffnende Datei :"
  IF Dialog.OpenFile() THEN RETURN
      OrtderPDF = Dialog.Path
     
      TextBoxQuelle.Text = Dialog.Path
      TextBoxQuelle.ToolTip = OrtderPDF
     
'Pdfgröße in bytes   
    WITH Stat(OrtderPDF)
      DateiGroesse = Round(.Size / 1.024)
      LetzterZugriff = .LastModified
    END WITH
   
    ReadyLesen = TRUE
   
   IF DateiGroesse <= 1000
    LabelDateigroesse.Text = "Größe: " & DateiGroesse & " Bytes"
   ELSE IF DateiGroesse > 1000 AND DateiGroesse <= 1000000
    LabelDateigroesse.Text = "Größe: " & Format$(DateiGroesse / 1000, "#,##") & " kBytes"
   ELSE IF DateiGroesse > 1000000
    LabelDateigroesse.Text = "Größe: " & Format$(DateiGroesse / 1000000, "#,##") & " MBytes"
   ENDIF

LabelZugriff.Text = LetzterZugriff
   
LabelDateigroesse.Visible = TRUE
LabelZugriff.Visible = TRUE

'Einzeldateiname aus Einlese-Pfad extrahiert
    PDFDateiName = Mid$(OrtderPDF, RInStr(OrtderPDF, "/") + 1)
   
'Name der Pdf-Datei ohne Endung
    PDFDateiNameNacksch = Left$(PDFDateiName, RInStr(PDFDateiName, ".") - 1)
   
'Leseverzeichnis aus Einlese-Pfad
    LeseDir = Left$(OrtderPDF, RInStr(OrtderPDF, "/") - 1)

'Erzeugung des Befehls zum Vorschaubild   
    PDFVorschauShell = "convert -thumbnail x112 '" & OrtderPDF & "[0]' /tmp/PDFVS.png"
    SHELL PDFVorschauShell WAIT
       
        PictureBoxVorschau.Picture = Picture.Load("/tmp/PDFVS.png")
        SHELL "rm /tmp/PDFVS.png" WAIT      'Bild wieder löschen im /tmp-Verzeichnis
        PictureBoxVorschau.Refresh()
       
       
'Dateiinformationen aus der gelesenen pdf abrufen       
        'Beispielbefehl in der Konsole: pdftk freiesMagazin-2009-12.pdf dump_data output info.txt
    PDFInfoShell = "pdftk '" & OrtderPDF & "' dump_data output /tmp/ofni.txt"
   
    SHELL PDFInfoShell WAIT '....Info-datei schreiben nach /tmp/ofni.txt

'DIM RechtsvonSeitenzahl AS String     'String rechts der Seitenanzahl
'DIM Seitenzahl AS String              'Anzahl der Seiten in der PDF
 
    InfoText = File.Load("/tmp/ofni.txt")
    RechtsvonSeitenzahl = Mid$(InfoText, RInStr(InfoText, "NumberOfPages:") + 15)
    Seitenzahl = Mid$(RechtsvonSeitenzahl, RInStr(RechtsvonSeitenzahl, " ") + 1)
    SeitenzahlZahl = Val(Seitenzahl)
   
    SpinBoxBis.Value = SeitenzahlZahl
    SpinBoxBis.MaxValue = SeitenzahlZahl
    SpinBoxVon.MaxValue = SeitenzahlZahl - 1
    SpinBoxNur.MaxValue = SeitenzahlZahl
   
'Anzeige der Seitenanzahl
  IF SeitenzahlZahl = 1 THEN
    LabelSeitenzahl.Text = SeitenzahlZahl & " Seite"
    ButtonOK.Enabled = FALSE
  ELSE
    LabelSeitenzahl.Text = SeitenzahlZahl & " Seiten"
    ButtonOK.Enabled = TRUE
  ENDIF

LabelSeitenzahl.Visible = TRUE     
TextBoxAnzeige.Text = "PDF-Datei " & PDFDateiName & " mit " & DateiGroesse & " Bytes eingelesen."

TextBoxZV.Text = LeseDir & "/"
ZielVerz = LeseDir & "/"

END

PUBLIC SUB ButtonSplittZV_Click()   '.............Zielverzeichnis mit Dialog ändern...................

  Dialog.Path = LeseDir
  Dialog.Title = "Speichern in:"
  Dialog.SelectDirectory()
  TextBoxZV.Text = Dialog.Path
  ZielVerz = Dialog.Path

END

PUBLIC SUB ButtonQuellInfo_Click() '::::::::::::::::::::::::::::::::Info anzeigen:::::::::::::::::::::::::


TextAreaDateiInfo.Text = InfoText

IF Infoanaus = TRUE THEN

    IF ReadyLesen = TRUE THEN
        PictureBoxVorschau.Hide
        TextAreaDateiInfo.Show
        ButtonQuellInfo.Caption = "Info ausblenden"
        Infoanaus = FALSE
    ELSE
        PictureBoxVorschau.Hide
        PictureBoxVorschau.Picture = Picture["./pinguin-antarktis.jpg"]
        PictureBoxVorschau.Refresh()
        PictureBoxVorschau.Show
       
        ButtonQuellInfo.Caption = "Datei-Info"
    ENDIF
ELSE
    ButtonQuellInfo.Caption = "Datei-Info"
    TextAreaDateiInfo.Hide
    PictureBoxVorschau.Show
    Infoanaus = TRUE
ENDIF

END

PUBLIC SUB RadioButtonAlle_Click()  'Trennmodus 1 ->alle
 TrennModus = 1
END

PUBLIC SUB RadioButtonNur_Click()   'Trennmodus 2 -> nur eine Seite
TrennModus = 2
END

PUBLIC SUB RadioButtonVonBis_Click()   'Trennmodus 3 -> Bereich von Seiten ausschneiden
 TrennModus = 3
END

PUBLIC SUB SpinBoxVon_Change()

 IF SpinBoxVon.Value > SpinBoxBis.Value THEN
    ButtonOK.Enabled = FALSE
 ELSE
    ButtonOK.Enabled = TRUE
 ENDIF
 
END

PUBLIC SUB SpinBoxBis_Change()

 IF SpinBoxVon.Value > SpinBoxBis.Value THEN
    ButtonOK.Enabled = FALSE
 ELSE
    ButtonOK.Enabled = TRUE
 ENDIF

END

PUBLIC SUB ButtonOK_Click()  ':::::::::::::::::::::::::Start Splitten !!!!:::::::::::::::::::::

DIM TrennBefehl AS String  '....Befehlsstring für SHELL-Übergabe zum Trennen und Speichern der PDF
 'Beispiel: pdftk beispiel.pdf burst output ./seiten/seite%03d.pdf
DIM Copierbefehl AS String   'holt die richtige Datei wieder aus dem tmp-Keller
 
DIM Nur AS String           'einzelne Seitennummer
DIM NurZahl AS Integer      'Zahlenwert der Seitennummer
DIM Von AS String           'Startseitennummer
DIM VonZahl AS Integer      'Zahlenwert der Startseitennummer
DIM Bis AS String           'Ende Seitennummer
DIM BisZahl AS Integer      'Zahlenwert der letzten Seitennummer
DIM Bereich AS String       'String des Auswahlbereiches
DIM BereichZahl AS Integer  'Spanne der zu kopierenden Dateien -> Laufvariable
 
  SELECT CASE TrennModus
      CASE 1
        TrennBefehl = "pdftk '" & OrtderPDF & "' burst output '" & ZielVerz & "''" & PDFDateiNameNacksch & "'seite%03d.pdf"
        SHELL TrennBefehl WAIT
      CASE 2
        Nur = SpinBoxNur.Value
        NurZahl = Val(Nur)
        TrennBefehl = "pdftk '" & OrtderPDF & "' burst output /tmp/'" & PDFDateiNameNacksch & "'seite%03d.pdf"
        SHELL TrennBefehl WAIT
       
            IF NurZahl < 10 THEN      'Formatierung des Dateinamens
                Nur = "00" & Nur
            ELSE IF NurZahl >= 10 AND NurZahl < 100 THEN
                Nur = "0" & Nur
            ELSE IF NurZahl >= 100 THEN
                Nur = Nur
            ENDIF
           
        Copierbefehl = "mv /tmp/'" & PDFDateiNameNacksch & "'seite" & Nur & ".pdf '" & ZielVerz & "''" & PDFDateiNameNacksch & "'seite" & Nur & ".pdf"
        SHELL Copierbefehl WAIT
        SHELL "rm /tmp/*.pdf" WAIT    'Rester löschen
       
      CASE 3
        Von = SpinBoxVon.Value
        Bis = SpinBoxBis.Value
        VonZahl = Val(Von)
        BisZahl = Val(Bis)
       
      IF VonZahl < BisZahl THEN            'macht nur dann Sinn !!!!
             
        TrennBefehl = "pdftk '" & OrtderPDF & "' burst output /tmp/'" & PDFDateiNameNacksch & "'seite%03d.pdf"
        SHELL TrennBefehl WAIT
       
        FOR BereichZahl = VonZahl TO BisZahl 'Durchlauf der zu kopierenden Dateien
             
              Bereich = Str$(BereichZahl)
             
            IF BereichZahl < 10 THEN      'Formatierung des Dateinamens StartSeite
                Bereich = "00" & Bereich
            ELSE IF BereichZahl >= 10 AND BereichZahl < 100 THEN
                Bereich = "0" & Bereich
            ELSE IF BereichZahl >= 100 THEN
                Bereich = Bereich
            ENDIF
           
                     
            Copierbefehl = "mv /tmp/'" & PDFDateiNameNacksch & "'seite" & Bereich & ".pdf '" & ZielVerz & "''" & PDFDateiNameNacksch & "'seite" & Bereich & ".pdf"
            SHELL Copierbefehl WAIT
        NEXT
       
        SHELL "rm /tmp/*.pdf" WAIT      'Rester löschen im /tmp-Verzeichnis
       
      ELSE
     
      Message("Auswahl prüfen", "OK")
      ENDIF
  END SELECT
 
  TextBoxAnzeige.Text = TrennBefehl
 
 
 
END  ':::::::::::::::::::Ende Splitbefehlsabfolge:::::::::::::::::::::::::::::::::::::::::::::::

PUBLIC SUB ButtonHpdftk_Click()

TextAreaH2.Hide
TextAreaH.Show
TextAreaHWZ.Hide
END

PUBLIC SUB ButtonHGUI_Click()

TextAreaH.Hide
TextAreaH2.Show
TextAreaHWZ.Hide
END

PUBLIC SUB ButtonHWZ_Click()

TextAreaH.Hide
TextAreaH2.Hide
TextAreaHWZ.Show

END

PUBLIC SUB TabStrip1_Click()    '.......Auswahl der Tabs...........................

SELECT CASE TabStrip1.Index
    CASE 0
      TextBoxAnzeige.Text = " Hier werden pdf's zerstückelt "
    CASE 1
      TextBoxAnzeige.Text = " Hier werden pdf's zusammengesetzt"
      TextBoxZPWD.Enabled = FALSE
      ButtonPSWDOK.Enabled = FALSE
      LabelPSWDgesetzt.Visible = FALSE
    CASE 2
      TextBoxAnzeige.Text = " Hier werden pdf's mit Wasserzeichen versehen"
      TextAreaWZ.Hide
      WZ = Application.Path & "/tux01.pdf"
      HG = Application.Path & "/bg.pdf"
    CASE 3
      TextBoxAnzeige.Text = " Hier werden pdf's gedreht"
      RadioButtonRAlle.Value = TRUE
    CASE 4
      TextBoxAnzeige.Text = " Hier werden pdf's vielfältig behandelt"
      LabelKS.Visible = FALSE
      ButtonKKey.Enabled = FALSE
    CASE 5
      TextBoxAnzeige.Text = " Hier werden Hilfe-Dateien gezeigt"
      TextAreaHWZ.Hide
END SELECT

END

':::::::::::::::Zusammenfügen:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

PUBLIC SUB ButtonAddieren_Click() '................Dateien zum Pool hinzufügen.............................

ButtonHoch.Enabled = FALSE
ButtonRunter.Enabled = FALSE

   'Filter für anzuzeigende Dateien
  Dialog.Filter = ["*.pdf; *.PDF", "PDF-Dateien"]
  Dialog.Title = "Datei hinzufügen:"
  IF Dialog.OpenFile() THEN RETURN
      DazuPDF = Dialog.Path
   
   IF ListBoxPool.Find(DazuPDF) = -1 THEN
      ListBoxPool.Add(DazuPDF)
   ELSE
      Message("Hallo, ich bin schon da!", "OK")
   ENDIF

  'Pdfgröße in bytes   
    WITH Stat(DazuPDF)
      DateiGroesseDazu = Round(.Size / 1.024)
    END WITH
   
    IF DateiGroesseDazu <= 1000
    LabelDateiGroesseDazu.Text = "Größe: " & DateiGroesseDazu & " Bytes"
   ELSE IF DateiGroesseDazu > 1000 AND DateiGroesseDazu <= 1000000
    LabelDateiGroesseDazu.Text = "Größe: " & Format$(DateiGroesseDazu / 1000, "#,##") & " kBytes"
   ELSE IF DateiGroesseDazu > 1000000
    LabelDateiGroesseDazu.Text = "Größe: " & Format$(DateiGroesseDazu / 1000000, "#,##") & " MBytes"
   ENDIF

END

PUBLIC SUB ListBoxPool_Click() '...............Auswahl der Datei in der Listbox.......
  AuswahlListbox = ListBoxPool.Index      '--> aktueller Index der Datei
  ButtonHoch.Enabled = TRUE
  ButtonRunter.Enabled = TRUE
END

PUBLIC SUB ButtonEntf_Click() '................Entfernen einer Datei aus der Listbox...
    ListBoxPool.Remove(AuswahlListbox)
    ButtonHoch.Enabled = FALSE
    ButtonRunter.Enabled = FALSE
END

PUBLIC SUB ButtonHoch_Click() '.................Sortierung nach oben.................

DIM nHoch AS Integer            'Zählvariable für eine Zeilennummer hochschieben
DIM ZeilenText AS String        'Text-Dateiname in der ausgewählten Zeile
DIM ZeileVorher AS String       'Text-Dateiname in der Zeile oberhalb der ausgewählten Zeile

    IF AuswahlListbox > 0 THEN   
   
        AuswahlListbox = ListBoxPool.Index      '--> aktueller Index der zu verschiebenden Zeile
        ZeilenText = ListBoxPool.Text           '--> dazu passender Listeneintrag
       
        nHoch = AuswahlListbox - 1              'Index um 1 verkleinern
        ListBoxPool.Index = nHoch               'kleineren Zeilenindex setzen
        ZeileVorher = ListBoxPool.Text          'String mit Inhalt der kleineren Zeile beschreiben
             
        ListBoxPool.Add(ZeileVorher, nHoch)             'n-1 Zeile neu schreiben
       
        ListBoxPool.Remove(AuswahlListbox)              'n-te Zeile entfernen
        ListBoxPool.Add(ZeilenText, AuswahlListbox)     'n-te Zeile neu schreiben
        ListBoxPool.Remove(AuswahlListbox + 2)          'n+2te Zeile löschen
       
    ELSE
        Message("Höher geht's nicht!", "OK")
    ENDIF
END

PUBLIC SUB ButtonRunter_Click() '..................Sortierung nach unten..................

DIM nTief AS Integer            'Zählvariable für eine Zeilennummer runterschieben
DIM ZeilenText AS String        'Text-Dateiname in der ausgewählten Zeile
DIM ZeileDrunter AS String      'Text-Dateiname in der Zeile unterhalb der ausgewählten Zeile

    IF AuswahlListbox < ListBoxPool.Count - 1 THEN   
   
        AuswahlListbox = ListBoxPool.Index      '--> aktueller Index der zu verschiebenden Zeile
        ZeilenText = ListBoxPool.Text           '--> dazu passender Listeneintrag
       
        nTief = AuswahlListbox + 1              'Index um 1 erhöhen
        ListBoxPool.Index = nTief               'größeren Zeilenindex setzen
        ZeileDrunter = ListBoxPool.Text          'String mit Inhalt der kleineren Zeile beschreiben
       
        ListBoxPool.Remove(nTief)                'n-te Zeile entfernen (eine nach der Auswahl)
        ListBoxPool.Add(ZeilenText, nTief)                'n+1 Zeile neu schreiben
       
        ListBoxPool.Add(ZeileDrunter, AuswahlListbox)     'n-te Zeile neu schreiben     
        ListBoxPool.Remove(AuswahlListbox - 1)              'überzählige Zeile Löschen     
           
    ELSE
        Message("Tiefer geht's nicht!", "OK")
    ENDIF
END

PUBLIC SUB CheckBoxZPWD_Click() '........Passwort der zusammengefügten pdf setzen dürfen

    IF CheckBoxZPWD.Value = TRUE THEN
        TextBoxZPWD.Enabled = TRUE
        TextBoxZPWD.Text = ""
        TextBoxZPWD.SetFocus
    ELSE
        TextBoxZPWD.Enabled = FALSE
        TextBoxZPWD.Text = "*******"
        LabelPSWDgesetzt.Visible = FALSE
        PSWDZF = ""
    ENDIF
END

PUBLIC SUB TextBoxZPWD_Change() '.........Eingabe in das Passwortfeld

    IF TextBoxZPWD.Text <> "" THEN
        ButtonPSWDOK.Enabled = TRUE
    ELSE
        ButtonPSWDOK.Enabled = FALSE
        LabelPSWDgesetzt.Visible = FALSE
    ENDIF
END


PUBLIC SUB ButtonPSWDNeu_Click()    '.....neues Passwort in das Textfeld "Passwort" schreiben können
                                    '.....und bisheriges Passwort löschen
        TextBoxZPWD.Text = ""
        TextBoxZPWD.SetFocus
        PSWDZF = ""
        LabelPSWDgesetzt.Visible = FALSE
END

PUBLIC SUB ButtonPSWDOK_Click()     '.....Inhalt der Textbox "Passwort" als Passwort übernehmen

    IF TextBoxZPWD.Text <> "" THEN
        PSWDZF = TextBoxZPWD.Text
        LabelPSWDgesetzt.Visible = TRUE
        TextBoxZFDN.SetFocus
        ButtonPSWDOK.Enabled = FALSE
    ELSE
        Message("Passwörter sehen anders aus!", "OK")
    ENDIF
END

PUBLIC SUB ButtonZZiel_Click() '.....Zielverzeichnis der zusammengesetzten Pdf auswählen.......

    Dialog.Path = User.Home
    Dialog.Title = "Speichern in:"
    Dialog.SelectDirectory()
    TextBoxZZiel.Text = Dialog.Path
    ZielVerzZF = Dialog.Path        '<---darein wird die neue PDF gespeichert

END

PUBLIC SUB TextBoxZFDN_Change() '....Dateiname für neue zusammengesetzte pdf erzeugen
  NeueZFpdf = TextBoxZFDN.Text
END

PUBLIC SUB ButtonZStart_Click() '::::::::::::::::::Startsequenz pdf zusammensetzen:::::::::::::::::::::::

DIM i AS Integer                    'Laufvariable für Listbox-Auslese-Schleife
DIM MaxListe AS Integer             'Anzahl der Einträge in der Listbox
DIM ipdfName AS String              'Dateiname mit Pfad der pdf-Datei in der Listbox
DIM AllePdfs AS String              'Kette der gelesenen pdf-Dateien, die zusammengefügt werden sollen
DIM ShellBefehlzusammen AS String   'Shellbefehl zum zusammenbauen
DIM ShellbefehlKey AS String

'Beispielbefehl:  pdftk beispiel.pdf formular.pdf cat output beispiel_gesamt.pdf
AllePdfs = ""

    MaxListe = ListBoxPool.Count
    FOR i = 0 TO MaxListe - 1
        ListBoxPool.Index = i
        ipdfName = ListBoxPool.Text
        AllePdfs = AllePdfs & "'" & ipdfName & "' " 'Format: "'fffff' 'ggggg' "
    NEXT

    IF CheckBoxZPWD.Value = TRUE THEN '...??Passwort gesetzt???
          'Encrypt a PDF using 128 - Bit Strength(the DEFAULT ) AND Withhold All Permissions(the DEFAULT )
          'Beispielbefehl: pdftk mydoc.pdf OUTPUT mydoc.128.pdf owner_pw uhufiffi
        ShellBefehlzusammen = "pdftk " & AllePdfs & "cat output '" & ZielVerzZF & "''" & NeueZFpdf & "'.128.pdf user_pw " & PSWDZF
    ELSE
        ShellBefehlzusammen = "pdftk " & AllePdfs & "cat output '" & ZielVerzZF & "''" & NeueZFpdf & "'.pdf"
    ENDIF
SHELL ShellBefehlzusammen WAIT

TextBoxAnzeige.Text = ShellBefehlzusammen

END

PUBLIC SUB ButtonWZQuelle_Click() '..........neue mit Wasserzeichen zu versehende pdf laden.....

DIM PDFVorschauShell AS String        'Shellbefehlsstring zum Erzeugen des Vorschaubildes
DIM PDFVorschaubild AS Picture        'erzeugtes Vorschaubild

'Filter für anzuzeigende Dateien
  Dialog.Filter = ["*.pdf; *.PDF", "PDF-Dateien"]
  Dialog.Title = "Zu öffnende Datei :"
  IF Dialog.OpenFile() THEN RETURN
      PdfNeuWZ = Dialog.Path

'Erzeugung des Befehls zum Vorschaubild   
    PDFVorschauShell = "convert -thumbnail x112 '" & PdfNeuWZ & "[0]' /tmp/PDFVS1.png"
    SHELL PDFVorschauShell WAIT
       
        PictureBoxWZQ.Picture = Picture.Load("/tmp/PDFVS1.png")
        SHELL "rm /tmp/PDFVS1.png" WAIT      'Bild wieder löschen im /tmp-Verzeichnis
        PictureBoxWZQ.Refresh()

END

PUBLIC SUB ButtonWZH_Click() '.............Info für Wasserzeichen bzw. Hintergrund einblenden.........
 
  IF InfoanausWZ = TRUE THEN
        FrameWasser.Hide
        FrameHG.Hide
        TextAreaWZ.Show
        ButtonWZH.Caption = "Info aus"
        InfoanausWZ = FALSE
  ELSE
        ButtonWZH.Caption = "Info ein"
        TextAreaWZ.Hide
        FrameWasser.Show
        FrameHG.Show
        InfoanausWZ = TRUE
  ENDIF

END

PUBLIC SUB ButtonWZLaden_Click()  '...neues Wasserzeichen laden...........................
'PUBLIC WZ AS String.............Pfad + Name des Wasserzeichens-pdf's
 
DIM PDFVorschauShell AS String        'Shellbefehlsstring zum Erzeugen des Vorschaubildes
DIM PDFVorschaubild AS Picture        'erzeugtes Vorschaubild

'Filter für anzuzeigende Dateien
  Dialog.Filter = ["*.pdf; *.PDF", "PDF-Dateien"]
  Dialog.Title = "Zu öffnende Datei :"
  IF Dialog.OpenFile() THEN RETURN
  WZ = Dialog.Path

'Erzeugung des Befehls zum Vorschaubild   
    PDFVorschauShell = "convert -thumbnail 84 '" & WZ & "[0]' /tmp/PDFWZ.png"
    SHELL PDFVorschauShell WAIT
       
        PictureBoxWZ.Picture = Picture.Load("/tmp/PDFWZ.png")
        SHELL "rm /tmp/PDFWZ.png" WAIT      'Bild wieder löschen im /tmp-Verzeichnis
        PictureBoxWZ.Refresh()

END

PUBLIC SUB ButtonHGLaden_Click() '.....neues Hintergrundbild-pdf laden .....................

'PUBLIC HG AS String....................Pfad + Name des Hintergrund-pdf's

DIM PDFVorschauShell AS String        'Shellbefehlsstring zum Erzeugen des Vorschaubildes
DIM PDFVorschaubild AS Picture        'erzeugtes Vorschaubild

'Filter für anzuzeigende Dateien
  Dialog.Filter = ["*.pdf; *.PDF", "PDF-Dateien"]
  Dialog.Title = "Zu öffnende Datei :"
  IF Dialog.OpenFile() THEN RETURN
  HG = Dialog.Path

'Erzeugung des Befehls zum Vorschaubild   
    PDFVorschauShell = "convert -thumbnail 84 '" & HG & "[0]' /tmp/PDFHG.png"
    SHELL PDFVorschauShell WAIT
       
        PictureBoxHG.Picture = Picture.Load("/tmp/PDFHG.png")
        SHELL "rm /tmp/PDFHG.png" WAIT      'Bild wieder löschen im /tmp-Verzeichnis
        PictureBoxHG.Refresh()   
END

PUBLIC SUB ToolButtonResetWZ_Click() '.........Standard-Wasserzeichen wiederherstellen.......
WZ = "./tux01.pdf"
PictureBoxWZ.Picture = Picture["./tux01.jpeg"] 
PictureBoxWZ.Refresh()   
END

PUBLIC SUB ToolButtonResetHG_Click()  '.........Standard-Hintergrund wiederherstellen.......
HG = "./bg.pdf"
PictureBoxHG.Picture = Picture["./bg.jpeg"] 
PictureBoxHG.Refresh()   

END

PUBLIC SUB RadioButtonWZ_Click()

    RadioButtonHG.Value = FALSE
    RadioButtonWZ.Value = TRUE
    CheckBoxStamp.Visible = TRUE

END

PUBLIC SUB RadioButtonHG_Click()

    RadioButtonHG.Value = TRUE
    RadioButtonWZ.Value = FALSE
    CheckBoxStamp.Visible = FALSE
 
END

PUBLIC SUB ButtonOKWZ_Click() '.....Starten der Prozedur Wasserzeichen bzw Hintergrund........

' String WZ -> Pfad + Dateiname für Wasserzeichen-pdf
' String HG -> Pfad + Dateiname für Hintergrund-pdf
' PUBLIC PdfNeuWZ AS String                 'neue PDF, die mit Wasserzeichen/Hintergrund versehen werden soll

DIM ShellbefehlMod AS String
DIM PDFDateiNameMod AS String
DIM PDFDateiNameNackschMod AS String
DIM LeseDirMod AS String
DIM WriteDirMod AS String             '...neu ausgewählter Pfad

'Einzeldateiname aus Einlese-Pfad extrahiert
    PDFDateiNameMod = Mid$(PdfNeuWZ, RInStr(PdfNeuWZ, "/") + 1)
   
'Name der Pdf-Datei ohne Endung
    PDFDateiNameNackschMod = Left$(PDFDateiNameMod, RInStr(PDFDateiNameMod, ".") - 1)
   
'Leseverzeichnis aus Einlese-Pfad
    LeseDirMod = Left$(PdfNeuWZ, RInStr(PdfNeuWZ, "/") - 1)

  IF CheckBoxWZUE.Value = TRUE THEN  '.......wir überschreiben
 
      IF RadioButtonWZ.Value = TRUE THEN
      'Application.Path & "/Daten/" & varOrt & ".csv"
      'Beispielbefehl: pdftk beispiel.pdf background tux00.pdf output beispiel_gestempelt.pdf
          IF CheckBoxStamp.Value = TRUE THEN
            ShellbefehlMod = "pdftk '" & PdfNeuWZ & "' stamp '" & WZ & "' output '" & LeseDirMod & "'/'" & PDFDateiNameNackschMod & "'stamp.pdf"
          ELSE
            ShellbefehlMod = "pdftk '" & PdfNeuWZ & "' background '" & WZ & "' output '" & LeseDirMod & "'/'" & PDFDateiNameNackschMod & "'bg.pdf"
          ENDIF
      ELSE 
            ShellbefehlMod = "pdftk '" & PdfNeuWZ & "' background '" & HG & "' output '" & LeseDirMod & "'/'" & PDFDateiNameNackschMod & "'hg.pdf"
      ENDIF
 
  ELSE '.....................................wir setzen neues Zielverzeichnis
 
  Dialog.Path = LeseDirMod
  Dialog.Title = "Speichern in:"
  Dialog.SelectDirectory()
  WriteDirMod = Dialog.Path
 
   IF RadioButtonWZ.Value = TRUE THEN
      'Application.Path & "/Daten/" & varOrt & ".csv"
      'Beispielbefehl: pdftk beispiel.pdf background tux00.pdf output beispiel_gestempelt.pdf
          IF CheckBoxStamp.Value = TRUE THEN
            ShellbefehlMod = "pdftk '" & PdfNeuWZ & "' stamp '" & WZ & "' output '" & WriteDirMod & "'/'" & PDFDateiNameNackschMod & "'stamp.pdf"
          ELSE
            ShellbefehlMod = "pdftk '" & PdfNeuWZ & "' background '" & WZ & "' output '" & WriteDirMod & "'/'" & PDFDateiNameNackschMod & "'bg.pdf"
          ENDIF
      ELSE 
            ShellbefehlMod = "pdftk '" & PdfNeuWZ & "' background '" & HG & "' output '" & WriteDirMod & "'/'" & PDFDateiNameNackschMod & "'hg.pdf"
      ENDIF
 
  ENDIF

  SHELL ShellbefehlMod WAIT

END

PUBLIC SUB ButtonRBrowse_Click() '..........Rotieren-Datei-Wähler..........................

DIM DateiGroesseR AS Integer
DIM PDFVorschauShellR AS String
DIM PDFInfoShellR AS String
DIM InfoTextR AS String
DIM RechtsvonSeitenzahlR AS String
DIM SeitenzahlR AS String
DIM SeitenzahlZahlR AS Integer

LabelRG.Visible = FALSE
LabelRS.Visible = FALSE

  'Filter für anzuzeigende Dateien
  Dialog.Filter = ["*.pdf; *.PDF", "PDF-Dateien"]
  Dialog.Title = "Zu öffnende Datei :"
  IF Dialog.OpenFile() THEN RETURN
      RPdfOrt = Dialog.Path
     
      TextBoxRQ.Text = Dialog.Path
      TextBoxRQ.ToolTip = RPdfOrt
     
'Pdfgröße in bytes   
    WITH Stat(RPdfOrt)
      DateiGroesseR = Round(.Size / 1.024)
    END WITH 
   
        IF DateiGroesseR <= 1000
          LabelRG.Text = "Größe: " & DateiGroesseR & " Bytes"
        ELSE IF DateiGroesseR > 1000 AND DateiGroesseR <= 1000000
          LabelRG.Text = "Größe: " & Format$(DateiGroesseR / 1000, "#,##") & " kBytes"
        ELSE IF DateiGroesseR > 1000000
          LabelRG.Text = "Größe: " & Format$(DateiGroesseR / 1000000, "#,##") & " MBytes"
        ENDIF
   
LabelRG.Visible = TRUE

'Einzeldateiname aus Einlese-Pfad extrahiert
    PDFDateiNameR = Mid$(RPdfOrt, RInStr(RPdfOrt, "/") + 1)
   
'Name der Pdf-Datei ohne Endung
    PDFDateiNameRNacksch = Left$(PDFDateiNameR, RInStr(PDFDateiNameR, ".") - 1)
   
'Leseverzeichnis aus Einlese-Pfad
    LeseDirR = Left$(RPdfOrt, RInStr(RPdfOrt, "/") - 1)

'Erzeugung des Befehls zum Vorschaubild   
    PDFVorschauShellR = "convert -thumbnail x112 '" & RPdfOrt & "[0]' /tmp/PDFRR.png"
    SHELL PDFVorschauShellR WAIT
       
        PictureBoxR.Picture = Picture.Load("/tmp/PDFRR.png")
        SHELL "rm /tmp/PDFRR.png" WAIT      'Bild wieder löschen im /tmp-Verzeichnis
        PictureBoxR.Refresh()
       
'Dateiinformationen aus der gelesenen pdf abrufen       
        'Beispielbefehl in der Konsole: pdftk freiesMagazin-2009-12.pdf dump_data output info.txt
    PDFInfoShellR = "pdftk '" & RPdfOrt & "' dump_data output /tmp/ofniR.txt"
   
    SHELL PDFInfoShellR WAIT '....Info-datei schreiben nach /tmp/ofniR.txt

'DIM RechtsvonSeitenzahl AS String     'String rechts der Seitenanzahl
'DIM Seitenzahl AS String              'Anzahl der Seiten in der PDF
 
    InfoTextR = File.Load("/tmp/ofniR.txt")
    RechtsvonSeitenzahlR = Mid$(InfoTextR, RInStr(InfoTextR, "NumberOfPages:") + 15)
    SeitenzahlR = Mid$(RechtsvonSeitenzahlR, RInStr(RechtsvonSeitenzahlR, " ") + 1)
    SeitenzahlZahlR = Val(SeitenzahlR)
   
'Anzeige der Seitenanzahl
  IF SeitenzahlZahlR = 1 THEN
    LabelRS.Text = SeitenzahlZahlR & " Seite"
  ELSE
    LabelRS.Text = SeitenzahlZahlR & " Seiten"
  ENDIF

LabelRS.Visible = TRUE

SpinBoxRES.MaxValue = SeitenzahlZahlR
SpinBoxRvon.MaxValue = SeitenzahlZahlR - 1
SpinBoxRbis.MaxValue = SeitenzahlZahlR

END

PUBLIC SUB RadioButtonRAlle_Click() '....alle Seiten....

 RadioButtonRAlle.Value = TRUE
 RadioButtonRerste.Value = FALSE
 RadioButtonRBereich.Value = FALSE
 RadioButtonRRBereich.Value = FALSE

END

PUBLIC SUB RadioButtonRerste_Click() '.....nur die erste Seite....

 RadioButtonRAlle.Value = FALSE
 RadioButtonRerste.Value = TRUE
 RadioButtonRBereich.Value = FALSE
 RadioButtonRRBereich.Value = FALSE
 
END

PUBLIC SUB RadioButtonRBereich_Click() '....Einzelseiten ...........

 RadioButtonRAlle.Value = FALSE
 RadioButtonRerste.Value = FALSE
 RadioButtonRBereich.Value = TRUE
 RadioButtonRRBereich.Value = FALSE

END

PUBLIC SUB RadioButtonRRBereich_Click() '....Einzelseiten als Bereich...........

 RadioButtonRAlle.Value = FALSE
 RadioButtonRerste.Value = FALSE
 RadioButtonRBereich.Value = FALSE
 RadioButtonRRBereich.Value = TRUE

END

PUBLIC SUB ButtonROK_Click() '..............Start der Rotier-Prozedur.................

DIM Rotorbefehl AS String
' Rotate the First Page OF a PDF TO 90 Degrees Clockwise
' pdftk in.pdf cat 1E 2-END OUTPUT out.pdf

' Rotate an Entire PDF Document's Pages to 180 Degrees
' pdftk in.pdf cat 1-endS OUTPUT out.pdf
DIM AuswahlSeiten AS String


IF RadioButton90u.Value = TRUE THEN ' .....90° Uhrzeigersinn -> "E"

    IF RadioButtonRAlle.Value = TRUE THEN
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat 1-endE output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'uhr.pdf"
    ELSE IF RadioButtonRerste.Value = TRUE THEN
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat 1E 2-end output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'uhr1.pdf"
    ELSE IF RadioButtonRBereich.Value = TRUE THEN
        AuswahlSeiten = SpinBoxRES.Value
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat " & AuswahlSeiten & "E output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'uhr" & SpinBoxRES.Value & ".pdf "
    ELSE IF RadioButtonRRBereich.Value = TRUE THEN
        IF SpinBoxRvon.Value < SpinBoxRbis.Value THEN
        AuswahlSeiten = SpinBoxRvon.Value & "-" & SpinBoxRbis.Value
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat " & AuswahlSeiten & "E output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'uhr" & SpinBoxRvon.Value & "-" & SpinBoxRbis.Value & ".pdf "
        ELSE
        Message("Auswahl-Bereich prüfen!", "OK")
        ENDIF
    ENDIF
   
ELSE IF RadioButton90.Value = TRUE THEN ' .....90° entgegen Uhrzeigersinn -> "W"

    IF RadioButtonRAlle.Value = TRUE THEN
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat 1-endW output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'antiuhr.pdf"
    ELSE IF RadioButtonRerste.Value = TRUE THEN
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat 1W 2-end output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'antiuhr1.pdf"
    ELSE IF RadioButtonRBereich.Value = TRUE THEN
        AuswahlSeiten = SpinBoxRES.Value
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat " & AuswahlSeiten & "W output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'antiuhr" & SpinBoxRES.Value & ".pdf "
    ELSE IF RadioButtonRRBereich.Value = TRUE THEN
        IF SpinBoxRvon.Value < SpinBoxRbis.Value THEN
        AuswahlSeiten = SpinBoxRvon.Value & "-" & SpinBoxRbis.Value
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat " & AuswahlSeiten & "W output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'antiuhr" & SpinBoxRvon.Value & "-" & SpinBoxRbis.Value & ".pdf "
        ELSE
        Message("Auswahl-Bereich prüfen!", "OK")
        ENDIF
    ENDIF

ELSE IF RadioButton180.Value = TRUE THEN ' .....180°  -> "S"

    IF RadioButtonRAlle.Value = TRUE THEN
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat 1-endS output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'180.pdf"
    ELSE IF RadioButtonRerste.Value = TRUE THEN
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat 1S 2-end output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'180_1.pdf"
    ELSE IF RadioButtonRBereich.Value = TRUE THEN
        AuswahlSeiten = SpinBoxRES.Value
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat " & AuswahlSeiten & "S output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'180_" & SpinBoxRES.Value & ".pdf "
    ELSE IF RadioButtonRRBereich.Value = TRUE THEN
        IF SpinBoxRvon.Value < SpinBoxRbis.Value THEN
        AuswahlSeiten = SpinBoxRvon.Value & "-" & SpinBoxRbis.Value
        Rotorbefehl = "pdftk '" & RPdfOrt & "' cat " & AuswahlSeiten & "S output '" & LeseDirR & "'/'" & PDFDateiNameRNacksch & "'180_" & SpinBoxRvon.Value & "-" & SpinBoxRbis.Value & ".pdf "
        ELSE
        Message("Auswahl-Bereich prüfen!", "OK")
        ENDIF
    ENDIF

ENDIF

   
    SHELL Rotorbefehl WAIT
    TextBoxAnzeige.Text = "Datei erfolgreich gedreht"
END
'.........................Ende Rotier-Prozedur...................................

'..........Beginn: Sonstiges...................................

PUBLIC SUB ButtonKOK_Click() '...............pdf-Datei für sonstiges aussuchen

DIM DateiGroesseK AS Integer
DIM LetzterZugriffK AS Date
DIM PDFVorschauShellK AS String
DIM PDFInfoShellK AS String
DIM InfoTextK AS String
DIM RechtsvonSeitenzahlK AS String
DIM SeitenzahlK AS String
DIM SeitenzahlZahlK AS Integer


 'Filter für anzuzeigende Dateien
  Dialog.Filter = ["*.pdf; *.PDF", "PDF-Dateien"]
  Dialog.Title = "Zu öffnende Datei :"
  IF Dialog.OpenFile() THEN RETURN
      OrtderPDFK = Dialog.Path
     
      TextBoxKQ.Text = Dialog.Path
      TextBoxKQ.ToolTip = OrtderPDFK
     
'Pdfgröße in bytes   
    WITH Stat(OrtderPDFK)
      DateiGroesseK = Round(.Size / 1.024)
      LetzterZugriffK = .LastModified
    END WITH

    IF DateiGroesseK <= 1000
      LabelKG.Text = "Größe: " & DateiGroesseK & " Bytes"
    ELSE IF DateiGroesseK > 1000 AND DateiGroesseK <= 1000000
      LabelKG.Text = "Größe: " & Format$(DateiGroesseK / 1000, "#,##") & " kBytes"
    ELSE IF DateiGroesseK > 1000000
      LabelKG.Text = "Größe: " & Format$(DateiGroesseK / 1000000, "#,##") & " MBytes"
    ENDIF

LabelKzug.Text = LetzterZugriffK
   
LabelKG.Visible = TRUE
LabelKzug.Visible = TRUE 

'Einzeldateiname aus Einlese-Pfad extrahiert
    PDFDateiNameK = Mid$(OrtderPDFK, RInStr(OrtderPDFK, "/") + 1)
   
'Name der Pdf-Datei ohne Endung
    PDFDateiNameNackschK = Left$(PDFDateiNameK, RInStr(PDFDateiNameK, ".") - 1)
   
'Leseverzeichnis aus Einlese-Pfad
    LeseDirK = Left$(OrtderPDFK, RInStr(OrtderPDFK, "/") - 1)

'Erzeugung des Befehls zum Vorschaubild   
    PDFVorschauShellK = "convert -thumbnail x112 '" & OrtderPDFK & "[0]' /tmp/PDFk.png"
    SHELL PDFVorschauShellK WAIT
     
    IF Exist("/tmp/PDFk.png") = TRUE THEN  '..Abfrage, ob Bild vorhanden
        PictureBoxK.Picture = Picture.Load("/tmp/PDFk.png")
        SHELL "rm /tmp/PDFk.png" WAIT      'Bild wieder löschen im /tmp-Verzeichnis
        PictureBoxK.Refresh()
    ELSE
      Message("Datei wahrscheinlich verschlüsselt oder mit Anhang!" & Chr$(10) & " Keine Vorschau!", "OK")
    ENDIF
   
'Dateiinformationen aus der gelesenen pdf abrufen       
        'Beispielbefehl in der Konsole: pdftk freiesMagazin-2009-12.pdf dump_data output info.txt
    PDFInfoShellK = "pdftk '" & OrtderPDFK & "' dump_data output /tmp/ofnik.txt"
   
    SHELL PDFInfoShellK WAIT '....Info-datei schreiben nach /tmp/ofnik.txt
   
    InfoTextK = File.Load("/tmp/ofnik.txt")
    RechtsvonSeitenzahlK = Mid$(InfoTextK, RInStr(InfoTextK, "NumberOfPages:") + 15)
    SeitenzahlK = Mid$(RechtsvonSeitenzahlK, RInStr(RechtsvonSeitenzahlK, " ") + 1)
    SeitenzahlZahlK = Val(SeitenzahlK)
   
    'Anzeige der Seitenanzahl
  IF SeitenzahlZahlK = 1 THEN
    LabelKS.Text = SeitenzahlZahlK & " Seite"
  ELSE
    LabelKS.Text = SeitenzahlZahlK & " Seiten"
  ENDIF

    TextAreaKinfo.Text = InfoTextK
    LabelKS.Visible = TRUE
        ReadyLesenK = TRUE
END

PUBLIC SUB ButtonKinfo_Click() ' info zur pdf anzeigen

 IF InfoanausK = TRUE THEN
    IF ReadyLesenK = TRUE THEN
        PictureBoxK.Hide
        TextAreaKinfo.Show
        ButtonKinfo.Caption = "Info ausblenden"
        InfoanausK = FALSE
    ELSE
        PictureBoxK.Hide
        PictureBoxK.Picture = Picture["./pinguin-antarktis.jpg"]
        PictureBoxK.Refresh()
        PictureBoxK.Show
        ButtonKinfo.Caption = "Datei-Info"
    ENDIF
  ELSE
    ButtonKinfo.Caption = "Datei-Info"
    TextAreaKinfo.Hide
    PictureBoxK.Show
    InfoanausK = TRUE
ENDIF 

END

PUBLIC SUB TextBoxKPSWD_Change()

  IF ReadyLesenK = TRUE THEN
   IF TextBoxKPSWD.Text = "" THEN
        ButtonKKey.Enabled = FALSE
   ELSE
        ButtonKKey.Enabled = TRUE
   ENDIF
  ELSE
      Message("Noch keine Datei gelesen!", "OK")
      ButtonKOK.SetFocus
  ENDIF
END

PUBLIC SUB TextBoxKPSWD_KeyPress()

    IF ReadyLesenK = TRUE THEN
        IF Key.Code = Key.Space THEN
          STOP EVENT
        ENDIF
    ENDIF
END

PUBLIC SUB TextBoxKPSWD_MouseDown()

IF ReadyLesenK = TRUE THEN
 IF TextBoxKPSWD.Text = "***gültiges Passwort***" THEN
         TextBoxKPSWD.Text = ""
         ButtonKKey.Enabled = FALSE
     ELSE
         TextBoxKPSWD.Text = TextBoxKPSWD.Text
     ENDIF 
ELSE
    Message("Noch keine Datei gelesen!", "OK")
    ButtonKKey.Enabled = FALSE
    TextBoxKPSWD.Text = "***gültiges Passwort***"
    ButtonKOK.SetFocus
ENDIF

END

PUBLIC SUB ButtonKKey_Click() '............pdf verschlüsseln..............................

DIM ShellbefehlKKey AS String
DIM PSWDKK AS String

IF ReadyLesenK = TRUE THEN
    'ShellBefehlzusammen = "pdftk " & AllePdfs & "cat output " & ZielVerzZF & NeueZFpdf & ".128.pdf user_pw " & PSWDZF
    IF TextBoxKPSWD.Text = "***gültiges Passwort***" OR TextBoxKPSWD.Text = "" THEN
       Message("Passwörter sehen anders aus!" & Chr$(10) & "  Gültiges Passwort eingeben", "OK")
    ELSE
      PSWDKK = TextBoxKPSWD.Text
      ShellbefehlKKey = "pdftk '" & OrtderPDFK & "' cat output '" & LeseDirK & "'/'" & PDFDateiNameNackschK & "'.128.pdf user_pw " & PSWDKK
      SHELL ShellbefehlKKey WAIT
    ENDIF
   
    TextBoxKPSWD.Text = "***gültiges Passwort***"
ELSE
    Message("Noch keine Datei gelesen!", "OK")
ENDIF

END


PUBLIC SUB ButtonKRepair_Click() '........pdf reparieren......................

'Repair a PDF 's Corrupted XREF Table and Stream Lengths (If Possible)
'pdftk broken.pdf OUTPUT fixed.pdf
DIM ShellbefehlRepair AS String

     ShellbefehlRepair = "pdftk '" & OrtderPDFK & "' output '" & LeseDirK & "'/'" & PDFDateiNameNackschK & "'repair.pdf"
      SHELL ShellbefehlRepair WAIT

END

PUBLIC SUB ButtonKAnhangdazu_Click() ' .............Datei ahängen..................

'pdftk beispiel.pdf attach_files tux01.eps beispiel.tex output beispiel_anhang.pdf

DIM ShellbefehlHangOn AS String
DIM OrtAnhang AS String

  'Filter für anzuzeigende Dateien
  Dialog.Filter = ["Picture files (*.jpg; *.jpeg; *.png; *.bmp)", "All files (*.*)"]

  Dialog.Title = "Zu öffnende Datei :"
  IF Dialog.OpenFile() THEN RETURN
      OrtAnhang = Dialog.Path

     ShellbefehlHangOn = "pdftk '" & OrtderPDFK & "' attach_files '" & OrtAnhang & "' output '" & LeseDirK & "'/'" & PDFDateiNameNackschK & "'_anhang.pdf"
      SHELL ShellbefehlHangOn WAIT
     
      TextBoxKShell.Text = ShellbefehlHangOn 

END

PUBLIC SUB ButtonKAnhangweg_Click() '............Datei-Anhang speichern..........

 'pdftk beispiel_anhang.pdf unpack_files output source
 'pdftk report.pdf unpack_files OUTPUT ~/atts/

 
DIM ShellbefehlHangOnRaus AS String
DIM OrtAnhangHin AS String

    Dialog.Path = User.Home
    Dialog.Title = "Speichern in:"
    Dialog.SelectDirectory()
    TextBoxKShell.Text = Dialog.Path
    OrtAnhangHin = Dialog.Path        '<---darein wird die neue PDF gespeichert

     ShellbefehlHangOnRaus = "pdftk '" & OrtderPDFK & "' unpack_files output '" & OrtAnhangHin & "'"
      SHELL ShellbefehlHangOnRaus WAIT
     
      TextBoxKShell.Text = ShellbefehlHangOnRaus   

END


'::::::::::::::::::::::::::::::::::Programmende::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

PUBLIC SUB ButtonEnde_Click()     '..............Programm Beenden...............

  ME.Close

END


Echt lang - aber ich kann's leider nicht besser :( :D
Viele Grüße Alf
Nichts verhilft so sicher zu einer eigenen Meinung wie der konsequente Verzicht auf Sachkenntnis!

jo42
Foriker
Beiträge: 29
Registriert: Mi 2. Dez 2009, 08:56

Re: GUI für pdftk

Beitrag von jo42 » Do 31. Dez 2009, 11:01

ddddddddddd
Zuletzt geändert von jo42 am Mo 5. Jul 2010, 23:55, insgesamt 1-mal geändert.

Benutzeravatar
alf17
Foriker
Beiträge: 37
Registriert: Do 7. Jun 2007, 16:46
Kontaktdaten:

Re: GUI für pdftk

Beitrag von alf17 » Do 31. Dez 2009, 11:36

Hallo Jo,
für diese Abfragen habe ich leider keine Lösung. Was aus dem Stand machbar wäre, wäre ein "Message-Hinweis", der beim Starten aufpopt, und darauf hinweist, das pdftk und ImageMagick installiert sein müssen. Vielleicht hat ja jemand anderes eine Technologie parat, wie solche "...ist xyz-Programm vorhanden?-Abfragen..." programmiert werden :?:

Viele Grüße Alf
Nichts verhilft so sicher zu einer eigenen Meinung wie der konsequente Verzicht auf Sachkenntnis!

jo42
Foriker
Beiträge: 29
Registriert: Mi 2. Dez 2009, 08:56

Re: GUI für pdftk

Beitrag von jo42 » Do 31. Dez 2009, 16:15

aaaaaaaaaaaaa
Zuletzt geändert von jo42 am Mo 5. Jul 2010, 23:56, insgesamt 6-mal geändert.

Benutzeravatar
alf17
Foriker
Beiträge: 37
Registriert: Do 7. Jun 2007, 16:46
Kontaktdaten:

Re: GUI für pdftk

Beitrag von alf17 » Do 31. Dez 2009, 17:04

Hallo jo42,
einfach Spitze, Dein Tool :D !!! Werde das gleich in die Startprozedur einfügen und probieren. Leider habe ich keinen Rechner mehr da, auf dem kein imagemagick 'drauf ist. Aber das "Funktionieren" kann ich ja mit anderen - noch "fehlenden" Programmen wie "MS-Windows" als Suchstring probieren.
Vielen Dank für Deinen Tip und die tolle Hilfe!
Gruß Alf
Nichts verhilft so sicher zu einer eigenen Meinung wie der konsequente Verzicht auf Sachkenntnis!

jo42
Foriker
Beiträge: 29
Registriert: Mi 2. Dez 2009, 08:56

Re: GUI für pdftk

Beitrag von jo42 » Do 31. Dez 2009, 17:50

yyyyyyyyyyy
Zuletzt geändert von jo42 am Mo 5. Jul 2010, 23:56, insgesamt 1-mal geändert.

Benutzeravatar
alf17
Foriker
Beiträge: 37
Registriert: Do 7. Jun 2007, 16:46
Kontaktdaten:

Re: GUI für pdftk

Beitrag von alf17 » Do 31. Dez 2009, 18:06

Hallo,
die neue Version wurde eben hochgeladen.

Gruß Alf
Nichts verhilft so sicher zu einer eigenen Meinung wie der konsequente Verzicht auf Sachkenntnis!

jo42
Foriker
Beiträge: 29
Registriert: Mi 2. Dez 2009, 08:56

Re: GUI für pdftk

Beitrag von jo42 » Di 5. Jan 2010, 02:22

dddddddddddd
Zuletzt geändert von jo42 am Mo 5. Jul 2010, 23:55, insgesamt 1-mal geändert.

Benutzeravatar
alf17
Foriker
Beiträge: 37
Registriert: Do 7. Jun 2007, 16:46
Kontaktdaten:

Re: GUI für pdftk

Beitrag von alf17 » Di 5. Jan 2010, 17:58

Danke für den Hinweis, ist glatt übersehen worden. Der Fehler hat sich aber auch nicht bemerkbar gemacht - oder ich hab's nicht gespürt.
Viele Grüße Alf.
Nichts verhilft so sicher zu einer eigenen Meinung wie der konsequente Verzicht auf Sachkenntnis!

Benutzeravatar
alf17
Foriker
Beiträge: 37
Registriert: Do 7. Jun 2007, 16:46
Kontaktdaten:

Re: GUI für pdftk

Beitrag von alf17 » Mi 13. Jan 2010, 17:20

Hier nochmal der Text, den ich in einen falschen Bereich des Forums gestellt hatte:

Hallo,
folgendes Problem: leider musste ich feststellen, das mein fertig erstelltes Programm (Hermitderpdf) im fertig compilierten Zustand nicht so funktioniert wie in der Programmierumgebung. Das Programm will/muss auf Dateien zugreifen (pdf-Dateien), die mit Bestandteil des Paketes sein sollten. Ausgabe in der Programmierumgebung:

Code: Alles auswählen

    pdftk '/home/alf/Dokumente/beispiel.pdf' background '/home/alf/Projekte/Gambas/Hermitderpdf/Hermitderpdf/tux01.pdf' output '/home/alf/Dokumente'/'beispiel'bg.pdf

Da stimmt der Pfad noch!
Und nun als Paket:

Code: Alles auswählen

    pdftk '/home/alf/Dokumente/beispiel.pdf' background '/usr/bin/tux01.pdf' output '/home/alf/Dokumente'/'beispiel'bg.pdf


Dabei ist das /usr/bin/tux01.pdf natürlich nicht o.k. :x
Also möchte ich, das die tux01.pdf mit Bestandteil des Paketes wird und bei der Installation an einen definierten Ort abgelegt wird, der dann von der installierten Anwendung wie erwartet gefunden wird. Habt Ihr da Lösungsvorschläge?

Viele Grüße Alf
Nichts verhilft so sicher zu einer eigenen Meinung wie der konsequente Verzicht auf Sachkenntnis!

jo42
Foriker
Beiträge: 29
Registriert: Mi 2. Dez 2009, 08:56

Re: GUI für pdftk

Beitrag von jo42 » Mi 13. Jan 2010, 23:02

ssssssssssssssss
Zuletzt geändert von jo42 am Mo 5. Jul 2010, 23:55, insgesamt 1-mal geändert.

Benutzeravatar
alf17
Foriker
Beiträge: 37
Registriert: Do 7. Jun 2007, 16:46
Kontaktdaten:

Re: GUI für pdftk

Beitrag von alf17 » Do 14. Jan 2010, 18:37

Hallo Jo,
vielen Dank für die Hinweise. Kling alles so logisch, das ich hätte auch 'mal selbst drauf kommen können :oops: . Jedenfalls werde ich das gleich am Wochenende probieren.
Vielen Dank
Nichts verhilft so sicher zu einer eigenen Meinung wie der konsequente Verzicht auf Sachkenntnis!

jo42
Foriker
Beiträge: 29
Registriert: Mi 2. Dez 2009, 08:56

Re: GUI für pdftk

Beitrag von jo42 » Sa 16. Jan 2010, 10:55

--------------

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste