Steffen Gebert: Auftrag: Dynamische Grafik und PDF-Druck-Export erzeugen ;-)

Hallo,

ich habe folgenden Auftrag von meiner Nachbar-Druckerei bekommen:

Ich soll ein Framework bauen, mit dem man übers Web so Etiketten für Weinflaschen usw. selbst gestalten kann und dann anschließend in der Druckerei als PDF landet.

Das heißt, ich brauche die Möglichkeit einer GIF/PNG-Vorschau und anschließend den PDF-Export in Druckqualität.

Zunächste hatte ich das mit Imagemagick probiert. - Das funktioniert eigentlich ganz toll, außer, dass das ***** (tolle *g*) Programm beim PDF-Export alle Schriften rastert, was ja nicht sinn von pdf ist.

Nun habe ich mal versucht, die PDFlib auszuprobieren, allerdings treibt die mich zur Verzweiflung, weil alle damit erzeugten dateien nur schrott sind (ich hab den code von phpbuilder.com).

Daher wollte ich mich mal an euch wenden, in der Hoffnung, dass ihr mir weiterhelfen könnt, wie man sowas am besten aufzieht.

Riesen Dank,
Steffen

  1. Hallo Steffen,

    Nun habe ich mal versucht, die PDFlib auszuprobieren, allerdings treibt die mich zur Verzweiflung, weil alle damit erzeugten dateien nur schrott sind (ich hab den code von phpbuilder.com).

    Warum schrott? Ich kenne die PDFLib in der Version 4.01 in Zusammenspiel mit PHP 4.0.6 und 4.2.0 und hatte damit bisher keine Probleme. Welcher Code von PHPBuilder.com? (die Seite ist groß ;-)) Wie sehen die ausgegeben Dateien aus? Was ist an ihnen auszusetzen?

    Christian

    --
    Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
    1. Hallo Steffen,

      Nun habe ich mal versucht, die PDFlib auszuprobieren, allerdings treibt die mich zur Verzweiflung, weil alle damit erzeugten dateien nur schrott sind (ich hab den code von phpbuilder.com).

      Warum schrott? Ich kenne die PDFLib in der Version 4.01 in Zusammenspiel mit PHP 4.0.6 und 4.2.0 und hatte damit bisher keine Probleme. Welcher Code von PHPBuilder.com? (die Seite ist groß ;-)) Wie sehen die ausgegeben Dateien aus? Was ist an ihnen auszusetzen?

      Christian

      Hallo.

      Mittlerweile bin ich so weit, dass ich es wenigstens schaffe, die PDF-datei (erfolgreich) in ein verzeichnis zu schreiben. - das funktioniert schon mal.
      laut http://www.zend.com/zend/spotlight/creatingpdfmay1.php sollte es aber auch mit dem dort gezeigten code funktionieren, die pdf-datei direkt auszugeben.

      so müsste es doch (laut zend.com) eigentlich auch funktionieren:
      <?php

      $pdf = pdf_new();
      pdf_open_file($pdf);

      pdf_set_info($pdf, "author", "Steffen Gebert");
      pdf_set_info($pdf, "title", "Test zend.com");
      pdf_set_info($pdf, "creator", "Steffen Gebert");
      pdf_set_info($pdf, "subject", "Test zend.com");

      pdf_begin_page($pdf, 450, 450);

      $font = pdf_findfont($pdf, "Helvetica", "host", 0);
      pdf_setfont($pdf, $font, 14);
      pdf_show_xy($pdf, "Hallo Welt!", 5, 255);

      pdf_end_page($pdf);

      pdf_close($pdf);

      $buffer = pdf_get_buffer($pdf);

      header("Content-type: application/pdf");
      header("Content-Length: ".strlen($buffer));
      header("Content-Disposition: inline; filename=zend.pdf");

      echo $buffer;

      pdf_delete($pdf);
      ?>

      was würdest du mir raten, wie ich das angehen soll, dass ich sowohl ein pdf als auch eine vorschau brauche.

      • ich habe mir das jetzt so gedacht:
        ich erstelle schon einmal das pdf und mache davon mittels imagemagick eine vorschau. die wird dann ausgegeben (notfalls wird das erst mit niedriger aufgelösten grafiken gemacht).
        das spart mir das ganze jeweils als grafik und pdf umzusetzen, dafür dauert aber das generieren der vorschau länger.

      mfg,
      steffen

      1. Hallo Steffen,

        laut http://www.zend.com/zend/spotlight/creatingpdfmay1.php sollte es aber auch mit dem dort gezeigten code funktionieren, die pdf-datei direkt auszugeben.
        [...]

        Und was genau funktioniert daran nicht? Ohne Fehlermeldung/Fehlerbeschreibung ist die Diagnose etwas schwer. ;-)

        • ich habe mir das jetzt so gedacht:
          ich erstelle schon einmal das pdf und mache davon mittels imagemagick eine vorschau. die wird dann ausgegeben (notfalls wird das erst mit niedriger aufgelösten grafiken gemacht).
          das spart mir das ganze jeweils als grafik und pdf umzusetzen, dafür dauert aber das generieren der vorschau länger.

        Ja, so würde ich es vermutlich auch machen. Wie häufig wird denn eine Vorschau generiert? Wenn das nicht allzu häufig ist, dann ist die Lösung in Ordnung, wenn die Vorschau jedoch sehr sehr häufig erzeugt wird, dann solltest Du Dir doch besser überlegen, das zweimal zu implementieren.

        Christian

        --
        Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
        1. Hallo Steffen,

          laut http://www.zend.com/zend/spotlight/creatingpdfmay1.php sollte es aber auch mit dem dort gezeigten code funktionieren, die pdf-datei direkt auszugeben.
          [...]

          Und was genau funktioniert daran nicht? Ohne Fehlermeldung/Fehlerbeschreibung ist die Diagnose etwas schwer. ;-)

          ich habe jetzt die header-ausgaben an den dateianfang geschrieben. jetzt merkt man wenigstens, dass da nochwas mitgesendet wird - allerdings hat das trotzdem den dateinamen der php-datei und nicht .pdf, weshalb der acrobat nicht geöffnet wird. wenn ich die datei allerdings speichere, meldet mir acrobat auch einen Dateilesefehler.

          • ich habe mir das jetzt so gedacht:
            ich erstelle schon einmal das pdf und mache davon mittels imagemagick eine vorschau. die wird dann ausgegeben (notfalls wird das erst mit niedriger aufgelösten grafiken gemacht).
            das spart mir das ganze jeweils als grafik und pdf umzusetzen, dafür dauert aber das generieren der vorschau länger.

          Ja, so würde ich es vermutlich auch machen. Wie häufig wird denn eine Vorschau generiert? Wenn das nicht allzu häufig ist, dann ist die Lösung in Ordnung, wenn die Vorschau jedoch sehr sehr häufig erzeugt wird, dann solltest Du Dir doch besser überlegen, das zweimal zu implementieren.

          im prinzip wird nach jedem schritt (also hintergrund & form auswählen, clipart, schriftzüge) eine vorschau erstellt. da das aber wahrscheinlich sowieso auf einem server in der druckerei per standleitung laufen wird, dürfte das nicht soo schlimm sein.

          Christian

          mfg,
          steffen

          1. Hallo Steffen,

            ich habe jetzt die header-ausgaben an den dateianfang geschrieben. jetzt merkt man wenigstens, dass da nochwas mitgesendet wird - allerdings hat das trotzdem den dateinamen der php-datei und nicht .pdf, weshalb der acrobat nicht geöffnet wird.

            Hä? Der Acrobat sollte sich eigentlich nur nach den Mime-Types richten - und die sendest Du richtig mit.

            wenn ich die datei allerdings speichere, meldet mir acrobat auch einen Dateilesefehler.

            Hmmm. Eine Testseite wäre nicht schlecht...

            im prinzip wird nach jedem schritt (also hintergrund & form auswählen, clipart, schriftzüge) eine vorschau erstellt. da das aber wahrscheinlich sowieso auf einem server in der druckerei per standleitung laufen wird, dürfte das nicht soo schlimm sein.

            Es kommt weniger auf die Internetanbindung als auf die Serverlast an. Wieviele Benutzer greifen gleichzeitig darauf zu? Wie schnell hintereinander wird die Vorschau aufgerufen?

            Christian

            --
            Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
            1. Hi,

              also, ich bin jetzt so weit, dass alles funktioniert! (also fast ;-)

              Ich habe meine php-datei, die dann korrekt entweder ein attachment oder als inline das pdf sendet.

              jetzt bin ich aber wieder bei dem problem, das ich gestern schon mal hatte:
              Fatal error: PDFlib error: Resource configuration file 'pdflib.upr' not found in ...
              sobald ich eine schrift einbetten will, kommt das

              ich habe die standardinstallation von php4.3.0 auf win32. pdflib müsste dann 4.02 sein.

              was muss ich mit diesem config-file machen, dass die schrift korrekt eingebettet wird?

              die zugriffe auf den server sollten sich in grenzen halten. ich denke nicht, dass da viele leute das gleichzeitig machen werden.

              kannst du mir evtl links zu pdf-tutorials (mit php) geben, die wirklich gut sind? - ich hab mir schon n paar reingezogen, wobei in 3/4 das selbe stand..

              thx,
              steffen

              1. Nochmal hallo ;-)

                ok, das problem habe ich jetzt insofern gelöst, dass ich über pdf_set_prameter() den pfad zur pdflib.upr gesetzt habe.

                "prefix" habe ich genauso gesetzt, so dass es den ordner mit den schriften findet - allerdings bekomme ich jetzt (immernoch nur, wenn ich die schrift einbetten will)
                PDFlib error: Outline data for font 'Times-Roman' not found ...

                mfg,
                steffen

                1. Hallo Steffen,

                  "prefix" habe ich genauso gesetzt, so dass es den ordner mit den schriften findet - allerdings bekomme ich jetzt (immernoch nur, wenn ich die schrift einbetten will)
                  PDFlib error: Outline data for font 'Times-Roman' not found ...

                  Hmmm. Bist Du Dir sicher, dass Du Times-Roman einbetten willst? Times-Roman ist doch eine Standardschriftart bei PDF. Du kannst höchstens andere Schriftarten (TrueTypes zum Beispiel) einbetten, aber Standardschriftarten liegen AFAIK nicht in einer Form vor, in der Du sie einbetten kannst, das brauchst Du eigentlich gar nicht.

                  Christian

                  --
                  Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
                  1. Hallo Steffen,

                    "prefix" habe ich genauso gesetzt, so dass es den ordner mit den schriften findet - allerdings bekomme ich jetzt (immernoch nur, wenn ich die schrift einbetten will)
                    PDFlib error: Outline data for font 'Times-Roman' not found ...

                    Hmmm. Bist Du Dir sicher, dass Du Times-Roman einbetten willst? Times-Roman ist doch eine Standardschriftart bei PDF. Du kannst höchstens andere Schriftarten (TrueTypes zum Beispiel) einbetten, aber Standardschriftarten liegen AFAIK nicht in einer Form vor, in der Du sie einbetten kannst, das brauchst Du eigentlich gar nicht.

                    Christian

                    Achso.... ich will nicht unbedingt Times-Roman einbetten - ich wollte halt einmal testen, ob das mit dem einbetten funktioniert.

                    wie kann ich mit einer truetype-schriftart in das pdf schreiben? ich dachte das geht nur mit den .afm...

                    mfg,
                    steffen

                    1. Hallo Steffen,

                      wie kann ich mit einer truetype-schriftart in das pdf schreiben? ich dachte das geht nur mit den .afm...

                      TrueType-Schriftarten werden wie "Outline"-Schriftarten behandelt. Siehe dazu am besten das PDFLib-Handuch: http://www.pdflib.com/pdflib/download/PDFlib-manual-D.pdf, Seiten 63-70.

                      Christian

                      --
                      Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.