PDF Writer als Druckertreiber



  • Okay so eine Antwort hilft mir schon mehr. 🙂

    Kann ich vielleicht einen schon bestehenden Treiber "missbrauchen" um mein Projekt zu realisieren?
    Ich möchte halt nur, dass der Drucker nicht nachfragt, wie die Datei heißen soll und wo er das abspeichern soll.

    Das ganze ist Rahmen eines Praktikums und scheinbar echt schwer zu knacken. Das Unternehmen will halt einen Treiber schaffen, der ein universelles Format druckt (XPS, PDF, etc), damit man dies mit verschiedenen ERP Systemen verwenden kann. Aussehen soll es wie eine Rechnung. Was jedoch wichtig ist, dass man sich den Text aus der Datei auch wieder rausfischen kann.

    Ich komme nun aus der Navision (C/AL) und bisschen C# Branche und hab hier echt dran zu beißen.


  • Mod

    Das ist ein Praktikumsprojekt im professionellen Umfeld? 😮

    Ich glaube, der Thread kann wohl zu Fragen bezüglich der Implementierung abgehakt werden und wandert hin zu "Wie sage ich meinem Chef, dass das nicht geht?"

    Wirklich, das ist eine Aufgabe für einen oder mehrere sehr erfahrene Entwickler mit Spezialwissen über Druckertreiber, nicht für einen Praktikanten.

    Kann ich vielleicht einen schon bestehenden Treiber "missbrauchen" um mein Projekt zu realisieren?
    Ich möchte halt nur, dass der Drucker nicht nachfragt, wie die Datei heißen soll und wo er das abspeichern soll.

    Erzähl mal mehr. Deine erste Anfrage klang nach OMGWTF, während dies wiederum nach einen trivialen VB-Script klingt.



  • SeppJ schrieb:

    Kann ich vielleicht einen schon bestehenden Treiber "missbrauchen" um mein Projekt zu realisieren?
    Ich möchte halt nur, dass der Drucker nicht nachfragt, wie die Datei heißen soll und wo er das abspeichern soll.

    Erzähl mal mehr. Deine erste Anfrage klang nach OMGWTF, während dies wiederum nach einen trivialen VB-Script klingt.

    Gerne.
    Ziel des Projektes ist es einen Treiber zu schaffen den man ganz einfach, wie jeden anderen Treiber auswählen kann, wenn man über "Drucken" geht. Dieser soll dann eine Datei in einem festen Verzeichnis erstellen. Der Treiber soll automatisch erkennen, worum es in dem Dokument geht und es entsprechend benennen. Zum Beispiel "Rechnung_0023" oder "Beleg_0011". Das ist aber eher ein Wunschkriterium.

    Es geht wirklich nur darum, dass der Anwender selber nur auf "Drucken" drücken muss. PLOP, soll eine Datei da sein ohne das der Anwender noch Dateipfad und Dateiname vergeben muss.

    EDIT: Ich versuche jetzt mal den XPSDriver Sample aus dem WindowsDDK zu benutzen und für meine Zwecke einfach eine Funktion dort zwischen zu schieben.



  • Du kannst auch den PDFCreator benutzen.

    Dieser erzeugt einen Registry Eintrag:
    PDFCreator
    -Program
    --AutosaveDirectory
    --AutosaveFilename

    Mit einer Klasse zum lesen und schreiben der Registry (Google) kannst Du dann das Verzeichnis und den Filenamen in die Registry schreiben und danach einfach auf den PDFCreator drucken. Dann passiert genau das was Du willst.

    Ich würde Dir noch empfehlen PDFCreator Help gut anzuschauen.

    Edit:
    Wenn Du nicht in die Registry schreiben willst:

    1.) Dann kannst Du den PDF Creator auch so konfigurieren dass er die Datei immer als zB. MyDoc.pdf ins Temp verzeichnis druckt. Danach kopierst Du die Datei mit dem gewünschten Namen in das gewünschte Verzeichnis.

    2.) Du steuerst den PDFCreator übder die COM Schnittstelle an.



  • SeppJ schrieb:

    Gnozo schrieb:

    Jedoch lerne ich dabei nicht, wie ich den selber programmiere und das ist mein Ziel.... 😉

    Oder du machst es wie der Nutzer "Fuchs aus dem Wald" hier im Forum, der seit über 6 Monaten versucht, einen JPEG-Decoder zu schreiben - bisher ohne Erfolg. Ihm haben auch alle gesagt, dass es viel zu schwierig ist, daran zu lernen und hatten wohl Recht (JPEG schätze ich übrigens als wesentlich einfacher ein).

    Naja, also ich bin mal gespannt.
    Letztstand war ja dass er meinte er habe die Daten jetzt als RGB-Array vorliegen. Wobei er sie noch nicht visuell kontrolliert hatte - kann natürlich sein dass da nur Quark drinsteht 🙂



  • Gnozo schrieb:

    ... automatisch erkennen, worum es in dem Dokument geht und es entsprechend benennen.

    Oje...

    Das klingt wirklich nach VBA-Makro. Für jede Anwendung extra, wo dann "exportieren als..." oder so aufgerufen wird.

    In Visio hab ich das mal gemacht, automatisch alle Tabs als Bilder exportiert und die Dateinamen entsprechend generiert. Ist aber nicht das, was Du willst.

    Oder LibreOffice (zumindest die Linux-Version): Da gibt es einen Button "Direktes Exportieren als PDF". OK, man muss nochmal den Dateinamen abnicken.

    Man könnte auch ein Script schreiben, was das PDF-Ablage-Verzeichnis nach neuen Dateien durchsucht, diese scannt, ggf. umbenennt und automatisch weiterkopiert...



  • Ich kann leider keine dritt Software benutzen. Das Unternehmen möchte gerne diesen Treiber dann anbieten können. Somit entfällt die Möglichkeit zum Beispiel PDFCreator zu nehmen.

    Ich versuche es jetzt mit dem XPS Format und habe einen Beispiel Treiber aus dem WinDDK. Den XPSDriverSample.

    Alles ist soweit vorbereitet und der Beispieltreiber funktioniert auch. Ich muss jetzt nur noch die richtige Stelle im Code finden, wo ich den Dateipfad übergeben kann. Am besten wäre es, wenn man den Dateipfad in einer Config Datei speichern könnte und der Treiber auf diese Zugreift. Ebenso für den Dateinamen.

    Das wird wohl noch eine harte Nuss. Ist nicht wenig Code, der da zu überblicken ist.

    Wenn jemand Anhaltspunkte hat, in welcher Source oder Header Datei ich die entsprechende Stelle finde. Immer her damit! 🙂

    Gruß
    Lukas



  • Wenn deine Firma den Treiber anbieten(=verkaufen?) will, solltest Du dich erstmal schlaumachen, ob Du dafür einfach so den kopierten Beispielcode von Microsoft verbraten darfst.



  • Windows macht das Ganze gleich noch mal ekelhafter.
    Um die ersten Schritte im Treiberfeld zu machen bietet sich Linux deutlich mehr an. Allein schon aufgrund der Tonnen an Opensource-Code.



  • So,

    Ich bin meinem Ziel wirklich näher gekommen.

    Dank diesen Threads:
    http://social.msdn.microsoft.com/Forums/en-US/wdk/thread/14f551f7-0f8a-4d0d-876b-09fa42077888

    Wie im vorletztem Post beschrieben muss ich an der Stelle

    "hr = pWriter->WriteBytes(pData, cbData, &cbWritten);"

    In einer "nuppage.cpp" meinen Code einfügen muss. Schauen wir mal, was denn genau WriteBytes ist und wie man es anwendet.

    Dann gebe ich nochmal Laut von mir! 🙂



  • Ich baue ein Auto!
    In meinem Buch steht ("Fixieren sie die Kurbelwelle mit einer 21mm Federstahlschraube")

    Jetzt schaue ich mal nach was eine 21mm Federstahlschraube ist und wie man sie benutzt!

    Sorry, das konnte ich mir nicht verkneifen ...



  • Es geht hier um ein Praktikum, welches mir einen Arbeitsplatz sichern soll, damit ich aus meiner Arbeitslosigkeit rauskomme, da ich dieses Jahr meinen Abschluss zum Anwendungsentwickler gemacht habe und meine Firma mich nicht übernimmt.

    Da helfen mir solche Kommentare herzlich wenig.

    Ich durchforste das Internet nach jeder nützlichen Situation, damit ich diese Aufgabe schaffe. Da kann sich so ein Troll wie du doch zurückhalten, wenn er nichts produktives zu sagen hat oder?

    Ich hatte leider noch nichts mit Treiberprogrammierung am Hut außer in der Berufsschule mit so einem Robotino und einem klickibunti Programm.


  • Mod

    Dann bist du für die Stelle einfach vollkommen unterqualifiziert. Wenn es gehässige Internetkommentare braucht, um dich darauf aufmerksam zu machen, dann ändert das trotzdem nichts an der Tatsache. Die Art von Fragen und wo du fragst zeigt eindeutig, dass Treiberentwicklung viel zu hoch für dich ist. Das musst du doch selber erkennen, auch wenn's weh tut. Vermutlich könnte niemand hier im Forum den Auftrag, so wie du sie beschreibst, aus dem Stand erfüllen, da hier einiges an Expertenwissen aus mehreren verschiedenen Bereichen notwendig ist. Bei dir hakt es schon bei den Grundlagen.

    Daher kann und wird dir das auch niemand vormachen und deine Fragen werden eher zurückhaltend beantwortet. Das fertige Programm wird sicherlich hunderte Expertenstunden in der Entwicklung nötig haben und entsprechend zehntausende Euro wert sein. Keinen Praktikantennachmittag. Es gibt auch sicherlich keine Videotutorials "Wie programmiere ich einen PDF-Druckertreiber für Dummies". Das wäre wirklich wie ein "Autobau für Anfänger".

    Oder du drückst dich höchst unglücklich aus. Wie schon mehrmals festgestellt wurde klingt deine Beschreibung stellenweise nach etwas, was man mit einem VB-Makro lösen könnte. Es gehört eben auch zur Programmierung, dass man korrekt ausdrücken kann, was man möchte und einen Plan hat, welche Mittel man so ungefähr einsetzen müsste.



  • Normalerweise werden hier auch keine Treiber entwickelt. Das Unternehmen beschränkt sich auf ein ERP-System (SAP) und entwickelt auch Addons für dieses Programm.

    Ziel ist es ein Programm, Script oder halt Treiber zu schaffen, welcher aus SAP über die ganz normale Funktion "Drucken" angesteuert werden kann.
    Der Endkunde soll nur den jeweiligen Drucker auswählen und bestätigen. Der Rest soll im Hintergrund ablaufen. Der Datei soll ein eindeutiger Name gegeben werden, wie zum Beispiel "Dokument_001.xps" und in einem festen Pfad abgespeichert werden. Zum Beispiel in "C:\XPSDrucke".

    Der Gedanke war halt ein XPSDrucker Beispiel, wie das aus dem WinDDK, zu nehmen und in dem richtigen Moment den Namen und Pfad automatisch zu setzen. Ebenso muss aber der Dialog "Speichern als" ausgeblendet werden.

    Wie gesagt, soll der Endanwender nur "Drucken" klicken, "XPSDrucker", auswählen und bestätigen. Daraufhin soll in einem Ordner eine entsprechende Datei zu finden sein.

    Mir ist das ganze auch nicht ganz schlüssig. Das vergeben eines Dateinamen und des entsprechendem Pfades dauert...... 30 Sekunden?..... warum dafür extra so viel Aufwand machen, für etwas, was sagen wir mal..... unwichtig ist?

    Naja, wenn Chefe das haben will.....


  • Mod

    Gnozo schrieb:

    Mir ist das ganze auch nicht ganz schlüssig. Das vergeben eines Dateinamen und des entsprechendem Pfades dauert...... 30 Sekunden?..... warum dafür extra so viel Aufwand machen, für etwas, was sagen wir mal..... unwichtig ist?

    http://xkcd.com/1205/
    Passt doch.



  • SeppJ schrieb:

    Gnozo schrieb:

    Mir ist das ganze auch nicht ganz schlüssig. Das vergeben eines Dateinamen und des entsprechendem Pfades dauert...... 30 Sekunden?..... warum dafür extra so viel Aufwand machen, für etwas, was sagen wir mal..... unwichtig ist?

    http://xkcd.com/1205/
    Passt doch.

    Ich glaube ich schick Ihm das jetzt mal. Kommentarlos.....


Anmelden zum Antworten