Druckvorschau von Firefox falsch
Frank Dagger
- css
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
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
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"
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
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
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
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
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
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