Matthias Apsel: fiktiver Programmierauftrag

Hallo alle,

nehmen wir einmal an, es wäre für eine Windowsumgebung folgendes zu leisten

  • eine Ordnerstruktur rekursiv durchsuchen
  • jedes Worddokument, dessen Dateiname auf ein bestimmtes Muster matcht
    • in PDF umwandeln, dieses in einem bestimmten Ordner speichern
    • (für jede Datei) ein Passwort generieren
    • in ein passwortgeschütztes PDF umwandeln, dieses in einem anderen Ordner speichern
  • die Zuordnung Datei - Passwort als txt-Dokument speichern

Welche Werkzeuge wären zur Erfüllung des Auftrages zu nutzen? Wie lange würde ein erfahrener Programmierer dafür brauchen?

Bis demnächst
Matthias

--
Rosen sind rot.

akzeptierte Antworten

  1. Hallo Matthias,

    das könnte man FAST mit einem VBA-Makro in Word machen. Problem ist die variable Verschlüsselung, ich bezweifle, dass man einen PDF-Druckertreiber dynamisch mit Passworten versehen kann.

    Vermutlich würde ich ein batchfähiges Tool dafür besorgen (grad mal gegoogelt, mein erster Schuss wären die 9 Euro für einen werbefreien PDFCreator Plus). Das rekursive Durchsuchen der Ordner machst Du mit einem Powershell-Script und rufst pro Datei den PDFCreator auf.

    Das Erzeugen der variablen Passwörter geht auch aus der Powershell heraus; die Frage ist natürlich, wie kryptographisch sicher der Zufall sein muss. Es gibt den einfachen .net Zufallsgenerator, aber auch kryptographische. Alles aus der Powershell verfügbar. Die Referenzdatei PDF-Name zu Passwort ist Kinkerlitz.

    Die Hauptarbeit FÜR MICH wäre der Einarbeitungsaufwand in Krypto-Details, und den PDFCreator. Da müsste man vor allem herausfinden, wie man ihm Passwörter unterschiebt - das scheint er nicht per Kommandozeile zu kennen.

    Wer das alles kennt und Übung mit einem PDF-Tool hat, baut das in ein paar Stunden. Ich würde vermutlich 2-3 Tage Fulltime brauchen, einfach wegen der Einarbeitung, aber garantieren kann ich es nicht weil ich ggf. weitere PDF Tools testen müsste wenn der PDF Creator nicht so mitspielt wie nötig. Frage ist auch, ob das ein Einmaltool wird, ob es von einem Experten bedient wird der auf der Befehlszeile turnen kann (oder die Pfade ins Script eintippen kann) oder ob ein GUI erforderlich ist. Letzteres kostet dann nochmal einen Tag, und vielleicht würde ich es dann eher mit C# als mit Powershell machen.

    Einarbeitungsaufwände kann man als Programmierer nicht abrechnen, d.h. letztlich wird es auf einen bezahlten Tag hinauslaufen. Für professionelle Freelancer irgendwas von 800-1500 Euro. Ja, das ist angemessen. Wenn es jemand neben dem Broterwerb macht, naja, dann gibt's sicher Freundschaftspreise.

    Und nein, ich mache es nicht - diesen Zeitblock kann ich nicht bereitstellen.

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf B,

      ein GUI wäre erforderlich.

      Bis demnächst
      Matthias

      --
      Rosen sind rot.
      1. Für die GUI - und ggf. weiteres - könntest Du AutoIt einsetzen.

        Grüße Basti

  2. Hallo @Matthias Apsel,

    nehmen wir einmal an, es wäre für eine Windowsumgebung folgendes zu leisten

    gilt auch eine unixoide Umgebung unter Windows (msys, cygwin, …)?

    • eine Ordnerstruktur rekursiv durchsuchen

    find

    • jedes Worddokument, dessen Dateiname auf ein bestimmtes Muster matcht

    find -iname

    • in PDF umwandeln, dieses in einem bestimmten Ordner speichern

    gs

    • (für jede Datei) ein Passwort generieren
    • in ein passwortgeschütztes PDF umwandeln, dieses in einem anderen Ordner speichern

    Vermutlich auch gs

    • die Zuordnung Datei - Passwort als txt-Dokument speichern

    Dafür schriebe ich ein Bashscript, was diese vier Aufgaben übernimmt.

    Welche Werkzeuge wären zur Erfüllung des Auftrages zu nutzen? Wie lange würde ein erfahrener Programmierer dafür brauchen?

    Wie gesagt, mit einer Bash und den nötigen Tools hätte ich die Werkzeugkiste. Dann muss man nur noch wissen, wie man damit arbeitet. Aber länger als einen Tag kann das nicht dauern – vermutlich eher im Bereich von wenigen Stunden.

    Viele Grüße
    Robert

    1. Hallo Robert B.,

      nehmen wir einmal an, es wäre für eine Windowsumgebung folgendes zu leisten

      gilt auch eine unixoide Umgebung unter Windows (msys, cygwin, …)?

      Ich denke, nicht.

      Wie gesagt, mit einer Bash und den nötigen Tools hätte ich die Werkzeugkiste.

      Ein GUI wäre sinnvoll.

      Bis demnächst
      Matthias

      --
      Rosen sind rot.
      1. Hallo @Matthias Apsel,

        nehmen wir einmal an, es wäre für eine Windowsumgebung folgendes zu leisten

        gilt auch eine unixoide Umgebung unter Windows (msys, cygwin, …)?

        Ich denke, nicht.

        das ist aber schade. Vielleicht kann man mit der PowerShell Ähnliches vollbringen, nur fehlt mir dazu die Erfahrung.

        Wie gesagt, mit einer Bash und den nötigen Tools hätte ich die Werkzeugkiste.

        Ein GUI wäre sinnvoll.

        … oder man probiert VB Script (grusel).

        Viele Grüße
        Robert

        1. Hallo Robert,

          ich hab mich mal versucht schlau zu machen. GS kann Word in PDF umwandeln? Auf den ersten Blick nicht; braucht man dazu Add-Ons?

          @Matthias Apsel: Mein aktueller Forschungsstand ist:

          • Word (2010) kann bei Handbedienung passwortverschlüsselte PDF erzeugen, aber nicht per API
          • PDFCreator kann das angeblich, ist aber in der Free-Version eine Adware-Schleuder (wird zumindest bei Heise Download vor gewarnt). Also habe ich da erstmal die Finger weggelassen.

          Einen Workflow, der mit einem C# Treiberprogamm oder per Powershell funktionieren würde und eine zweistufige Konvertierung mittels Word und Ghostscript durchführt, wäre aber prinzipiell möglich, die einzelnen Schritte habe ich mir angeguckt.

          Bisheriger Invest: ca 8h 😀, 4h für das das Treiberprogramm und 4h heute Abend für Toolstudium. Invest zur Fertigstellung: Vermutlich nochmal 2 Abende.

          Rolf

          --
          sumpsi - posui - clusi
          1. Hallo @Rolf B,

            ich hab mich mal versucht schlau zu machen. GS kann Word in PDF umwandeln? Auf den ersten Blick nicht; braucht man dazu Add-Ons?

            Oh, das nicht, Sorry, habe ich übersehen. Aber Word kann AFAIK mittlerweile auch direkt als PDF speichern, vielleicht kann man das per Kommandozeilen-Parameter von außen triggern. Dann bräuchte man GhostScript lediglich für die fortgeschrittenen PDF-Features.

            Viele Grüße
            Robert

    2. Hallo Robert,

      Ja, es gibt cygwin, mit einer bash drin soweit ich weiß, und es gibt auch Ghostscript für Windows. Wusste gar nicht, dass das Word lesen und PDF schreiben kann.

      ICH als alter Windows Fuzzy würde die Hülle um den gs Kern dann trotzdem mit C# oder Powershell machen. Oder VBScript, für Masos...

      Matthias, wäre es auch ok wenn man den Quellordner im Explorer einfach auf ein Scripticon zieht? Das bekommt den Ordnernamen dann von Windows als Parameter und kann loslegen...

      Wie „fiktiv“ ist das hier eigentlich? Ist das ein Job, oder eine Übung für den Info Unterricht?

      Rolf

      --
      sumpsi - posui - clusi
      1. Hallo Rolf B,

        Matthias, wäre es auch ok wenn man den Quellordner im Explorer einfach auf ein Scripticon zieht? Das bekommt den Ordnernamen dann von Windows als Parameter und kann loslegen...

        Es werden ja mindestens zwei Ordner benötigt. Der, der durchsucht werden soll und der, in dem die PDFs landen sollen.

        Wie „fiktiv“ ist das hier eigentlich? Ist das ein Job, oder eine Übung für den Info Unterricht?

        Noch nicht spruchreif, ggf. ein echter Job.

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
        1. Hallo Matthias,

          die Lösung ist oft „Konvention vor Konfiguration“. Beim UI ist auch immer die Frage, was der Einsatzzweck ist. Bevor man sich da festlegt, müsstest du den spezifizieren. Das wäre ein Teil des Fachkonzeptes.

          Die Drag'n'drop Idee wäre: Ziehe Ordner A auf das Script, Script legt Ordner A.PDF als Nachbar an und spuckt das Ergebnis dahin. Wenn das für dich reicht, wäre das eine preiswerte Möglichkeit.

          Rolf

          --
          sumpsi - posui - clusi
  3. Hallo Matthias,

    nehmen wir einmal an, es wäre für eine Windowsumgebung folgendes zu leisten

    Ich habe leider keine klassischen Programmierkenntnisse(c++, Java, etc…) und so stehe ich oft vor ähnlichen Herausforderungen. Oft ergibt sich daraus aber die Möglichkeit, aus der Not eine Tugend zu machen. Bei ähnlichen Projekten von mir löse ich deshalb so was auf Basis von Server/PHP, was zwar zunächst den Nachteil bei Dateilokalisierung und Geschwindigkeit hat, aber dafür den Vorteil Systemunabhängig und Cloud/Web fähig.

    • eine Ordnerstruktur rekursiv durchsuchen

    kann PHP

    • jedes Worddokument, dessen Dateiname auf ein bestimmtes Muster matcht

    Kann PHP

    • in PDF umwandeln, dieses in einem bestimmten Ordner speichern

    kann PHP (auch wenn es schon Scripte und Klassen dafür gibt, in dem Fall viell. sogar eine kommerzielle Lösung bevorzugen.)

    • (für jede Datei) ein Passwort generieren

    Kann Php

    • in ein passwortgeschütztes PDF umwandeln, dieses in einem anderen Ordner speichern

    Kann Php ( gibt da auch bei github zb. noch Verstärkung)

    • die Zuordnung Datei - Passwort als txt-Dokument speichern

    Kann Php

    Welche Werkzeuge wären zur Erfüllung des Auftrages zu nutzen? Wie lange würde ein erfahrener Programmierer dafür brauchen?

    Wenn du es so angehen würdest, weißt Du die Antwort, weil du dich mit diesen Werkzeugen auskennst.

    Gruss
    Henry

    1. Hallo Henry,

      [PHP]

      Wenn du es so angehen würdest, weißt Du die Antwort, weil du dich mit diesen Werkzeugen auskennst.

      Eine Browserlösung habe ich (zunächst einmal) ausgeschlossen.

      Bis demnächst
      Matthias

      --
      Rosen sind rot.
      1. Hallo Matthias,

        Eine Browserlösung habe ich (zunächst einmal) ausgeschlossen.

        Das würde auch ohne Browser gehen, ich weiß du hast andere Vorstellungen, nur zur Ergänzung für spätere Leser.

        PHP-Programme lassen sich durchaus wie Windowsprogramme anschauen und "anfühlen". Dazu gibt es Tools wie Winbinder bzw. für PHP7 die Fork davon. Dieses kurze Tutorial hier ist schon etwas veraltet und die Links dort stimmen auch nicht mehr unbedingt. Dafür aber kurz und verständlich erklärt, worum es überhaupt geht. Und natürlich findet sich auch hier im Archiv etwas dazu. Ich habe es zwar mal vor ein paar Jahren, der Neugierde wegen, erfolgreich getestet, aber bin dann doch schnell wieder zur normalen Anwendung im Browser zurückgekehrt, weil eben von überall aus nutzbar.

        Gruss
        Henry

        1. Hi Henry,

          Das würde auch ohne Browser gehen, ich weiß du hast andere Vorstellungen, nur zur Ergänzung für spätere Leser.

          Auch für heutige User. Finde ich sehr interessant und kannte es noch nicht. Sehr schade, dass es da nicht mehr Links+Tutorials zu gibt…

          Schade auch, dass der Link von @bleicher im Archiv nicht mehr funktioniert, ich hätte gerne mal in seinen Code hinein geschaut.

          Pit

          1. Tach!

            Auch für heutige User. Finde ich sehr interessant und kannte es noch nicht. Sehr schade, dass es da nicht mehr Links+Tutorials zu gibt…

            Weil es nicht mehr als "interessant" ist. Das Ergebnis fühlt sich letztlich wie ein Fremdkörper an. Ich sehe auch keine gesteigerte Notwendigkeit, PHP auf das Problem ansetzen zu müssen. Visual Studio ist kostenlos erhältlich, und soweit ich das gesehen habe, gibt es auch C#-Lösungswegvorschläge für die genannten Teilaufgaben im Netz.

            dedlfix.

            1. Hi dedlfix,

              Weil es nicht mehr als "interessant" ist. Das Ergebnis fühlt sich letztlich wie ein Fremdkörper an. Ich sehe auch keine gesteigerte Notwendigkeit, PHP auf das Problem ansetzen zu müssen. Visual Studio ist kostenlos erhältlich, und soweit ich das gesehen habe, gibt es auch C#-Lösungswegvorschläge für die genannten Teilaufgaben im Netz.

              Aber mit C# kenne ich mich ganz und gar nicht aus... und ab und an wäre eine Win-Desktopanwendung schon ganz nett… Und wenn man das mit php bewerkstelligen könnte, fände ich das klasse.

              Pit

              1. Tach!

                Aber mit C# kenne ich mich ganz und gar nicht aus... und ab und an wäre eine Win-Desktopanwendung schon ganz nett… Und wenn man das mit php bewerkstelligen könnte, fände ich das klasse.

                Du kennst dich aber auch garantiert nicht mit den Librarys aus, die man für PHP braucht, um die Elemente einer GUI für ein Desktop-Programm zu erstellen. Da kannst du auch mit gleich mit C# anfangen.

                dedlfix.

                1. Hallo dedlfix,

                  Du kennst dich aber auch garantiert nicht mit den Librarys aus, die man für PHP braucht, um die Elemente einer GUI für ein Desktop-Programm zu erstellen. Da kannst du auch mit gleich mit C# anfangen.

                  Dazu gibt es jedoch schon viele Hilfsmittel/Tutorials/Packages und auch Alternativen zu Winbinder.

                  Wer es noch einfacher mag, habs nicht getestet, kann auch zu kommerziellen Mitteln (zb. http://www.exeoutput.com) greifen.

                  Aber ich gebe dir natürlich recht, dass es den Aufwand wahrscheinlich nicht wert ist, sofern man es nicht just4fun als Erfahrungswert wissen möchte.

                  Gruss
                  Henry