Ankündigung

Einklappen
Keine Ankündigung bisher.

Exakte Ausgabe für Adressetiketten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Exakte Ausgabe für Adressetiketten

    Hallo erstmal!

    Ich hoffe, dass ich in das richtige Subforum poste. Falls nicht bitte ich um Verschiebung des Threads in das passende Forum.

    Nun zu meinem Problem:
    Ich habe eine Datenbank, in welcher alle möglichen Informationen zu den Mitgliedern gespeichert sind (Vorname, Nachname, Adresse, PLZ, Land, Telefon, E-Mail,...)
    Nun filtere ich diese und möchte auf Adressetiketten drucken.
    Das ganze sieht aktuell so aus, dass ich eine Seite outputPost.php habe, in der die relevanten Daten in einzelne Arrays speichere:
    PHP-Code:
    foreach ($result as $user => $data) {
        
    $ausgelesenAnrede[$user] = $data->Anrede;
        
    $ausgelesenTitel[$user] = $data->Titel;
        
    $ausgelesenVorname[$user] = $data->Vorname;
        
    $ausgelesenNachname[$user] = $data->Nachname;
        
    $ausgelesenFirma[$user] = $data->Firma;
        
    $ausgelesenStraße[$user] = $data->Straße;
        
    $ausgelesenPLZ[$user] = $data->Postleitzahl;
        
    $ausgelesenOrt[$user] = $data->Ort;
        
    $ausgelesenLand[$user] = $data->Land;

    Dadurch habe ich nun alle Informationen für einen User an einer bestimmten Stelle in dem jeweiligen Array stehen (falls dieser User z.B. keinen Eintrag für die Firma hat, so bleibt $ausgelesenFirma an der Stelle einfach leer)
    Jetzt möchte ich, basierend auf diesen Arrays, einen Output erzeugen, welchen ich auf Adressetiketten drucken kann.
    Derzeit erzeuge so eine Ausgabe:
    HTML-Code:
        <?php for ($userID = 0; $userID < $countUser; $userID++): ?>
            <table border="0" cellpadding="10" cellspacing="1" align="left" width="50%">
                <tr>
                    <td>
                        <?=$ausgelesenAnrede[$userID]?>
                        <?=$ausgelesenTitel[$userID]?>
                        <?=$ausgelesenVorname[$userID]?>
                        <?=$ausgelesenNachname[$userID]?>
                    </td>
                </tr>
                <?php if (!empty($ausgelesenFirma[$userID])) : ?>
                    <tr>
                        <td>
                            <?=$ausgelesenFirma[$userID]?>
                        </td>
                    </tr>
                <?php endif ?>
                <tr>
                    <td>
                        <?=$ausgelesenStraße[$userID]?>
                    </td>
                </tr>
                <tr>
                    <td>
                        <?=$ausgelesenPLZ[$userID]?>
                        <?=$ausgelesenOrt[$userID]?>
                    </td>
                </tr>
                <tr>
                    <td>
                        <?=$ausgelesenLand[$userID]?>
                    </td>
                </tr>
            </table>
            <?php if (($userID+1) % 2 == 0) : ?>
                <table border="0" cellpadding="0" cellspacing="0" align="left" width="100%">
                    <tr>
                        <td>
                            <?='<br>'?>
                        </td>
                    </tr>
                </table>
            <?php endif ?>
        <?php endfor ?>
    Ich erhalte quasi 2 Tabellen nebeneinander in denen jeweils die Informationen für einen Benutzer stehen. (Über [STRG]+[P] würde ich die Ausgabe einfach an den Drucker senden)
    Nach jeder 2. Tabelle (-> neue Zeile) füge ich eine leere Zeile hinzu, um immer den gleichen Abstand zu garantieren. Dies hat den Hintergrund, dass bei einem User z.B. kein Eintrag bei der Firma vorhanden ist. Somit wären die zwei nebeneinander aufgelisteten Tabellen unterschiedlich groß, und die weiteren Tabellen würde sich verschieben.
    Hier habe ich ein Vorlage (A4) von den Adressetiketten:


    Wie kann ich den Code so gestalten, dass die Daten immer exakt in die einzelnen Felder der Adressetiketten passen?

    Ich hoffe ihr versteht was ich meine und könnt mir helfen!

    Danke und LG

  • #2
    Ich habe jetzt das cellpadding verringert, die Tabellenbreite auf 33% gesetzt und auch den modulo operator auf 3 geändert (für meine 3 spalten)
    Gibt es eine schönere Variante eine exakte Ausgabe zu erzeugen?
    Oder bin ich aktuell auf den richtigen Weg und muss es einfach so gut wie möglich hinbasteln?
    Weiters wollte ich fragen wie ich meine Ausgabe mehr an den Seitenrand positionieren kann bzw. allgemein die Seitenränder besser nutze? (siehe pdf Vorlage für meine Adressetiketten)

    Danke und LG

    Kommentar


    • #3
      auch wenn jetzt wohlne neue din norm glt hier nochmal was als anhaltspunkt verlinkt:
      http://www.luk-korbmacher.de/Schule/Text/din676.htm

      Kommentar


      • #4
        Danke für deine Rückmeldung / Informationen über die DIN5008.

        Ich bin dennoch nach wie vor auf der Suche nach einer Lösung für mein Problem.
        Wie kann ich den Druckbereich so festlegen, dass meine Ausgabe exakt (oder zumindest so gut wie möglich) auf die Adressetiketten (siehe meinen ersten Post) passen?

        Wenn ich über meinen Explorer (Chrome) drucken möchte, so habe ich u.a. folgende Einstellmöglichkeiten:


        Wenn ich nun die Option "Ränder" verändere, komme ich meinem gewünschten Ergebnis schon näher.


        Kann ich dies in meinen Files so einstellen, dass dies immer (ohne Interaktion des Endanwenders) gemacht wird?
        Gibt es eine andere Lösung, welche ich aktuell nicht sehe?

        Ich hoffe ihr könnt mir helfen!
        Danke und LG

        Kommentar


        • #5
          Hallo

          ohne Interaktion des Endanwenders
          Das Ausdrucken von Webseiten wird leider nur sehr oberflächlich unterstützt.

          Erschwerend kommt hinzu, das jeder Browser dabei sein eigenes Süppchen kocht und zum Beispiel noch Kopf- und / oder Fußzeilen ausdruckt, die gar nicht im Quelltext stehen.

          Und jeder Drucker hat einen anderen Druckbereich, also mehr oder weniger breite Ränder, die er nicht bedrucken kann.

          Auf die Betriebssysteme (und damit zum Beispiel der vorhandenen Schriftarten, die ja auch den Ausdruck beeinflussen), die Browser und die Drucker deiner Besucher hast du keinen Einfluss.

          Beim mehr oder weniger mm-genauen Drucken von Etiketten über Webseiten bist du damit von vornherein auf der Verliererseite.

          Kann ich dies in meinen Files so einstellen, dass dies immer (ohne Interaktion des Endanwenders) gemacht wird?
          Nein, auf die Druckereinstellungen deiner Besucher hast du keinerlei Einflußmöglichkeiten.

          Gibt es eine andere Lösung, welche ich aktuell nicht sehe?
          Du kannst deine Chancen verbessern wenn du statt Tabellen geeignetere Elemente wie divs oder sections verwendest, die du dann entsprechend in der Größe anpasst, plazierst und dabei ein paar mm-Luft zugibst. Zum Schluss solltest du das natürlich in allen geläufigen Browser testen.

          Gruss

          MrMurphy

          Kommentar


          • #6
            Ist (soweit ich das sehen kann) noch nicht gefallen: man kann mit CSS auch metrische Maßeinheiten (z. B. cm) nutzen, um Elemente absolut und relativ zu anderen Elementen auf der Druckausgabe zu positionen...

            Kommentar


            • #7
              Am Einfachsten und mitunter auch am Saubersten ist doch der Weg über ein PDF.
              [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

              Kommentar


              • #8
                Sauber ja, aber einfach?

                Kommentar


                • #9
                  Lesen hilft http://www.smashingmagazine.com/2015...utm_medium=web

                  Kommentar


                  • #10
                    Danke kaminbausatz für den Link.
                    Ich versuche aktuell meine Daten über DIV-Elemente zu platzieren.
                    Dabei konnte ich den Link bzgl. CSS-Design sehr gut brauchen.
                    Ich habe ein DIV-Element, welches sämtliche Informationen zu einem User beinhaltet. Dies möchte ich 3x pro Zeile und 8x pro Spalte auf einer Seite platzieren (siehe Post #1)
                    HTML-Code:
                    <style>
                            div.dataset {
                                width: 220px;
                                height: 115px;
                                margin-right: 14.3px;
                                margin-bottom: 10px;
                                border: 1px solid #000;
                                color: #000;
                                float: left;
                                font-size: 15px;
                            }
                            @page {
                              size: A4;  
                              margin: 0.5cm 0.5cm 0.5cm 0.5cm; <!-- Oben - Rechts - Unten - Links -->
                            }
                            @page:first {
                              size: A4;  
                              margin: 0cm;
                            }
                    </style>
                    Wie ihr sehen könnt, versuche ich die Seitenränder exakt zu definieren, damit die DIV-Elemente gut platziert werden.
                    Jetzt habe ich das Problem, dass die 1. Seite IMMER einen gewissen Margin hat. Wieso?
                    Ich kann natürlich das alles über Trial&Error über den Margin-Befehl für die erste Seite definieren, jedoch würde mich interessieren was dahinter steckt.

                    Danke und LG

                    Kommentar

                    Lädt...
                    X