Frank Dagger: Druckvorschau von Firefox falsch

Hallo zusammen,

ich habe hier eine ASP-Webseite die den Inhalt eines SQL-Queries zurückgibt.
Damit man beim Scrollen durch die Ergebnisse den Überblick behält habe ich die Kopfzeile (die Spaltennamen) als eigenständige Tabelle mit nur einer Zeile eingebaut und darunter eine zweite, scrollfähige Tabelle mit den Werten.
Die spaltenbreiten habe ich fix codiert, damit die Spaltennamen auch immer über den Spalten stehen. Das funktioniert im IE perfekt, im Firefox läuft das am Ende um ein paar Pixel auseinander, aber damit kann ich noch leben.

Da eine scrollfähige Tabelle nicht ausgedruckt werden kann, habe ich mir ein Stylesheet definiert das für die Ausgabe auf einen Drucker die Tabelle ohne scrollbalken anzeigt.

Die Ausgabe am Drucker funktioniert im IE sehr gut, wenn ich das gleiche aber über Firefox versuche, sieht das Ergebnis miserabel aus. Die Spaltennamen sind TOTAL verrutscht, ab der Hälfte stehen anderen Namen über den Spalten.

Weiß jemand woran das liegen kann ??

Danke
Frank

  1. Hallo,

    Die spaltenbreiten habe ich fix codiert, damit die Spaltennamen auch immer über den Spalten stehen. Das funktioniert im IE perfekt, im Firefox läuft das am Ende um ein paar Pixel auseinander, aber damit kann ich noch leben.

    IE und FF interpretieren margin, padding und border in Verbindung mit einer vorgegebenen Breite unterschiedlich. Hast du Pixel oder % angegeben?

    Da eine scrollfähige Tabelle nicht ausgedruckt werden kann, ...

    ??? Wieso nicht?

    Die Ausgabe am Drucker funktioniert im IE sehr gut, wenn ich das gleiche aber über Firefox versuche, sieht das Ergebnis miserabel aus.

    Vielleicht mal ein Link auf die Seite, sonst muss ich den Kaffeesatz befragen ...

    Weiß jemand woran das liegen kann ??

    Nöö, noch nicht, weil ich nichts sehe. Habe mich aber intensiv mit diesem Thema beschäftigt.

    Kalle

    1. Hallo Kalle,

      ein Link ist leider nicht möglich da es sich um eine firmeninterne Seite handelt. Ich kann dir aber die relevanten Codeteile hier auflisten:

      1)  Hier wird in einer Schleife über alle Spalten (aus dem SQL-Statement) die Breite ausgewählt:

      case "ICC"
        ReDim Preserve fieldNameArray(i)
        fieldNameArray(i) = "20px"
      case "PCC"
        ReDim Preserve fieldNameArray(i)
        fieldNameArray(i) = "22px"

      1. Danach wird der Spaltenname an die Zeile angehängt bis alle Spaltennamen durch sind:

      response.write("<td width="&fieldNameArray(i)&" bgcolor='#00FFFF' valign=top>" & RS(i).Name & "</td>")

      Nachdem diese erste Tabelle (mit den Spaltennamen) befüllt wurde, schließe ich sie und öffne eine neue Tabelle für die Inhalte.

      3)  Die werden nach dem folgenden Muster eingefügt:

      response.write("<td width="&fieldNameArray(i)&" ALIGN=RIGHT>" & tmp_rs & "</font></td>")

      Das geschieht eben so lange bis alle Zeilen und Spalten befüllt sind.

      Ich habe die Spaltenbreite jeweils in Pixel angegeben damit ich die obere Tabelle (die Spaltennamen) und die Inhalte gleich beschreiben kann. Und da ich die Spalten einzeln an die Länge der Inhalte der Zellen anpassen musste war das mit Pixel natürlich einfacher :)

      Wenn ich eine Seite mit einer scrollbaren Tabelle ausdrucke sehe ich nur den aktuellen Inhalt der Tabelle, selbst wenn ich auf der noch 10 Seiten nach unten scrollen könnte.

      Das zugehörige CSS-Kommando sieht so aus:

      Für den Drucker:
      div#c {
       width:1130px;
      }

      Für den Bildschirm:
      div#c {
      overflow:auto;
       width:1130px;
       height:470px;
      }

      Das CSS-Kommando wird nur auf die untere Tabelle angewendet.

      Danke für deine Hilfe :)

      Gawan

      1. Hi,

        ein Link ist leider nicht möglich da es sich um eine firmeninterne Seite handelt. Ich kann dir aber die relevanten Codeteile hier auflisten:

        Warum tust Du's dann nicht?

        1)  Hier wird in einer Schleife über alle Spalten (aus dem SQL-Statement) die Breite ausgewählt:

        Serverseitiger Code ist für clientseitige Dinge vollkommen irrelevant.

        response.write("<td width="&fieldNameArray(i)&" bgcolor='#00FFFF' valign=top>" & RS(i).Name & "</td>")
        response.write("<td width="&fieldNameArray(i)&" ALIGN=RIGHT>" & tmp_rs & "</font></td>")

        Das zugehörige CSS-Kommando sieht so aus:
        div#c {
        div#c {

        Also irgendein CSS-Code (Kommando sowieso nicht, ist ja keine Befehlssprache), der nichts mit dem bißchen erkennbaren HTML-Code zu tun hat (denn darin kommt kein id="c" vor.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hi,

          ein Link ist leider nicht möglich da es sich um eine firmeninterne Seite handelt. Ich kann dir aber die relevanten Codeteile hier auflisten:

          Warum tust Du's dann nicht?

          1)  Hier wird in einer Schleife über alle Spalten (aus dem SQL-Statement) die Breite ausgewählt:

          Serverseitiger Code ist für clientseitige Dinge vollkommen irrelevant.

          response.write("<td width="&fieldNameArray(i)&" bgcolor='#00FFFF' valign=top>" & RS(i).Name & "</td>")
          response.write("<td width="&fieldNameArray(i)&" ALIGN=RIGHT>" & tmp_rs & "</font></td>")

          Das zugehörige CSS-Kommando sieht so aus:
          div#c {
          div#c {

          Also irgendein CSS-Code (Kommando sowieso nicht, ist ja keine Befehlssprache), der nichts mit dem bißchen erkennbaren HTML-Code zu tun hat (denn darin kommt kein id="c" vor.

          cu,
          Andreas

          Willst du mir hier nur erklären welche formalen Fehler ich beim Beschreiben meines Problems gemacht hab oder soll das eine Art konstruktive Kritik sein ??

          Gawan

          1. Hi,

            Willst du mir hier nur erklären welche formalen Fehler ich beim Beschreiben meines Problems gemacht hab oder soll das eine Art konstruktive Kritik sein ??

            Es war der (gescheiterte) Versuch, Dir den für die Lösung Deines Problems _relevanten_ Code zu entlocken.
            Aber offensichtlich hast Du keinerlei Interesse an der Lösung Deines Problems - sonst würdest Du ja den dafür notwendigen Code zeigen (Kalle_B hatte ja auch schon nach dem Code gefragt) ...

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Schreinerei Waechter
            O o ostern ...
            Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Hiho,

              Hi,

              Willst du mir hier nur erklären welche formalen Fehler ich beim Beschreiben meines Problems gemacht hab oder soll das eine Art konstruktive Kritik sein ??

              Es war der (gescheiterte) Versuch, Dir den für die Lösung Deines Problems _relevanten_ Code zu entlocken.
              Aber offensichtlich hast Du keinerlei Interesse an der Lösung Deines Problems - sonst würdest Du ja den dafür notwendigen Code zeigen (Kalle_B hatte ja auch schon nach dem Code gefragt) ...

              cu,
              Andreas

              ok, ich versuch es nochmal :)

              Ich arbeite derzeit an einer Tabelle in einer ASP-Seite die den Inhalt eines SQL-Queries widergibt und durch die im Browser gescrollt werden kann, die am Drucker aber ganz normal gedruckt wird.

              Da ich bei der Browser-Ansicht gerne eine feststehende Zeile mit den Spaltennamen haben möchte, habe ich mir für die Spaltennamen eine eigene Tabelle gebaut.
              Um zu garantieren dass die Tabelle mit den Spaltennamen und die Tabelle mit dem Queryinhalt die gleiche Spaltenbreite haben, wird die Breite für jede Spalte fix codiert.
              Das ganze sieht im Code dann so aus:
              (in RS(i).Name steht die Spaltenbreite und in tmp_rs stehen dann die Felder des Queries)

                
              <TABLE><TR>  
              <hr align="left" color="#FF0000">  
              <%  
              For i = 0 to RS.Fields.Count - 1  
              select case RS(i).Name  
              case "A"    ReDim Preserve fieldNameArray(i)  
                   fieldNameArray(i) = "30px"  
              case "B"    ReDim Preserve fieldNameArray(i)  
                   fieldNameArray(i) = "42px"  
              case "C"    ReDim Preserve fieldNameArray(i)  
                   fieldNameArray(i) = "155px"  
                
              response.write("<td width="&fieldNameArray(i)&" bgcolor='#00FFFF' valign=top><font size=1 color='#000000'><b>" & RS(i).Name & "</b></a></font></td>")  
              Next  
                
              response.write("</TR>")  
              </TABLE>  
                
              <DIV id="c">  
              <TABLE>  
              response.write("<TR bgcolor='#dddddd'>")  
              response.write("<td width="&fieldNameArray(i)&" ALIGN=RIGHT><font size=1>" & tmp_rs & "</font></td>")  
              response.write("</TR>")  
              </TABLE>  
              </DIV>  
              
              

              Der DIV-Tag verweist auf ein CSS-File und soll den Umstand regeln, dass die Tabelle im Browser scrollbar ist, am Drucker jedoch nicht

              DIV-Tag in der Drucker.css

                
              div#c {  
              overflow:auto;  
               width:1130px;  
               height:470px;  
              }  
              
              

              DIV-Tag in der Default.css

                
              div#c {  
               width:1130px;  
              }  
              
              

              So sieht es im IE aus. So stell ich mir die Darstellung auch vor - eigentlich
              http://img212.imageshack.us/img212/9443/bild3jo0.jpg

              So wird die gleiche Seite im Firefox dargestellt - man sieht bei den letzten Spalten, dass sie nicht mehr ganz übereinander stehen - aber damit könnte ich noch leben.
              http://img238.imageshack.us/img238/2519/bild2gl3.jpg

              Hier sieht man die Druckvorschau im IE. Genauso soll es ausschaun !!
              http://img503.imageshack.us/img503/3483/bild3yj4.jpg

              Und das ist die Druckvorschau im Firefox. Da passt keine einzige Spaltenüberschrift zur Spalte darunter :(:(
              http://img237.imageshack.us/img237/4158/bild4tn4.jpg

              Gawan

              1. Hallo,

                habe deinen Code (trotz Nachfrage) nicht nachvollzogen. Warum denn so umständlich?

                Auch ich habe für einen Kunden Tabellen mit mehreren hundert Zeilen. Beim Drucken mit FF sind Spaltenüberschriften kein Problem, auf jedem Blatt wird <thead> sauber wiederholt.

                Auf dem Monitor scrollt die Überschrift natürlich weg. Da habe ich einen fixierten Bereich zusätzlich oben über die Tabelle gelegt mit einer Tabelle, die nur den <thead> enthält.

                Und um den <thead> nicht doppelt machen zu müssen, kopiere ich ihn per Javascript von der großen in die kleine Tabelle. Hier ein (vom Kunden freigegebenes) Muster. Schaue es dir mit dem FF an:
                http://www.aktivferien.de/tm3/v3/aussteller_a.htm

                Kalle