Axel Hoogestraat: Expression in Media Print

Hi,

ich brauche in einer Webseite einen kleinen Workaround in der Druckversion. Es geht um eine Intranetseite, die ausschliesslich im Internet Explorer verwendet werden soll.
Wenn ich in der CSS-Datei für den Druck eingeben :

body { zoom:80%; }

funktioniert das einwandfrei. Ich brauche allerdings eine Berechnung. Folgendes funktioniert leider nicht:

body { zoom: Expression(80+"%"); }

In der CSS für Media=Screen funktioniert das einwandfrei. Weiß jemand, was da falsch läuft? Expressions allgemein müssten in Druck-Stylesheets funktionieren, da ich während meiner Google-Recherche einen Beitrag in einem Forum gefunden habe, in dem genau das geschrieben wurde. Dort wurde #irgendeineid { width: Expression(...); } verwendet und hatte funktioniert.

Ich weiß nicht, was ich falsch mache.

Vielen, vielen Dank im Voraus
Schöne Grüße
Axel

  1. Hallo,

    Wenn ich in der CSS-Datei für den Druck eingeben :

    body { zoom:80%; }
    funktioniert das einwandfrei. Ich brauche allerdings eine Berechnung. Folgendes funktioniert leider nicht:

    body { zoom: Expression(80+"%"); }

    Ich weiß nicht, was ich falsch mache.

    MS sagt (zweite Satz}:
    "Dynamic property formulas are assigned in script with the setExpression method. They can also be assigned inline using the global possible value, expression, in the style block or in the STYLE attribute."

    Versuche es also erst in einem <style> @media print { } </style>, falls du es bisher in einer externen CSS-Datei versucht hast.

    Weiters mehr auf die Syntax achten:
    <ELEMENT STYLE="sAttributeName:expression(sExpression)">
    http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/setexpression.asp
    Was soll eigentlich »80+"%"« außer gar nichts bewirken?

    Grüße
    Thomas

    --
    Surftip: kennen Sie schon Pipolino's Clowntheater?
    http://www.clowntheater-pipolino.net/
    1. Ji,

      Versuche es also erst in einem <style> @media print { } </style>, falls du es bisher in einer externen CSS-Datei versucht hast.

      Hat leider auch nicht zum Erfolg geführt. Vorher hatte ich es in einer externen Datei. Die habe ich rausgenommen und
      <style type="text/css">
         @media print {
      body { zoom: expression("10%"); }
          }
      </style>

      verwendet. Gleiches Problem. (In der externen CSS für media=screen hatte es ja auch funktioniert)

      Weiters mehr auf die Syntax achten:
      <ELEMENT STYLE="sAttributeName:expression(sExpression)">

      Naja, das könnte ich im Body-Tag machen, aber dort kann ich doch nicht media=print angeben, oder? Also mein Freiversuch:
      <body style='@media print {zoom: expression("10%");}'>
      funktioniert auch nicht.

      Was soll eigentlich »80+"%"« außer gar nichts bewirken?

      So bewirkt das natürlich nichts. Das war nur ein Test, um zu probieren, ob das überhaupt funktioniert. Falls das nochmal funktionieren sollte, kommt dort eine Berechnung rein, die den Zoom-Faktor anhand der Seitenbreite so berechnet, dass das Ganze auf eine Druckseite passt.

      Vielen Dank bis hierher
      schöne Grüße
      Axel

      1. Hallo,

        Hat leider auch nicht zum Erfolg geführt. Vorher hatte ich es in einer externen Datei. Die habe ich rausgenommen und
        <style type="text/css">
           @media print {
        body { zoom: expression("10%"); }
            }
        </style>

        verwendet. Gleiches Problem. (In der externen CSS für media=screen hatte es ja auch funktioniert)

        Hm, ja MS sagt zu expression():
        "Use the expression() syntax to set an expression on a CSS attribute in HTML." Also schinbar gilt expression() nur im style="".

        So bewirkt das natürlich nichts. Das war nur ein Test, um zu probieren, ob das überhaupt funktioniert. Falls das nochmal funktionieren sollte, kommt dort eine Berechnung rein, die den Zoom-Faktor anhand der Seitenbreite so berechnet, dass das Ganze auf eine Druckseite passt.

        So funktioniert das für das h1 auch in der Druckvorschau (für body wird das in der Tat nicht verwendet)

        <style type="text/css">
          body { zoom:100%; font-family:courier; }

        @media print {
           body { zoom:expression(parseInt(document.body.currentStyle.zoom)/2+'%'); font-family:Tahoma; }
          }
        </style>
        </head>

        <body onload="alert(parseInt(document.body.currentStyle.zoom))">

        <h1 style="zoom:expression(parseInt(document.body.currentStyle.zoom)/2+'%')">Titeltext</h1>

        Vielleicht ist für dich in diesem Zusammenhang eher interessant: http://msdn.microsoft.com/workshop/browser/hosting/printpreview/reference/reference.asp
        (schau dir auch die zwei Links am der Seite an.)

        Grüße
        Thomas

        --
        Surftip: kennen Sie schon Pipolino's Clowntheater?
        http://www.clowntheater-pipolino.net/
        1. Hi,

          Hm, ja MS sagt zu expression():
          "Use the expression() syntax to set an expression on a CSS attribute in HTML." Also schinbar gilt expression() nur im style="".

          mmh. Ne, die gehen auch in den Dateien.
          body { zoom:50%; } funktioniert in einer externen Stylesheet-Datei. Aber halt nicht für media=print.

          So bewirkt das natürlich nichts. Das war nur ein Test, um zu probieren, ob das überhaupt funktioniert. Falls das nochmal funktionieren sollte, kommt dort eine Berechnung rein, die den Zoom-Faktor anhand der Seitenbreite so berechnet, dass das Ganze auf eine Druckseite passt.

          Vielleicht ist für dich in diesem Zusammenhang eher interessant: http://msdn.microsoft.com/workshop/browser/hosting/printpreview/reference/reference.asp
          (schau dir auch die zwei Links am der Seite an.)

          Hehe, die Printtemplates hab ich auch gerade gefunden. Aber die funktionieren überhaupt nicht. Ich hab verschiedene Dateien probiert (auch gegoogelt) aber ich glaube die haben auch weniger damit zu tun, was ich erreichen möchte. Das ist so wie mit den Kanonen und den Spatzen. Da müsste scheinbar die ganze Seite umstrukturiert werden. (Dann könnte ich auch gleich ne 2. Druckversion anbieten)

          In den Links steht auch wenig neues. Außer : "All filter styles, including visual effects filters, are ignored when printing"
          Allerdings kann das eigentlich nicht das Problem sein, denn ich kann ja den Zoom in der Druckversion nutzen, aber nicht mir Expression.
          Ich bekomme langsam den Eindruck, das "Expression" nicht in CSS mit Media=Print funktioniert, ein altes Post, das ich in einem anderen Forum gelesen hatte etwas anderes sagt. Aber vielleicht ist das ja auch in einem SP deaktiert worden. Ich weiß jedenfalls nicht mehr weiter :-(

          Vielen Dank für Deine Hilfe
          Schöne Grüße
          Axel

          1. Lieber Axel, lieber Thomas,

            wie es aussieht, hat M$ mal wieder seinen eigenen proprietären Dreck inkonsequent umgesetzt. Ein weiteres trauriges Beispiel dafür, dass man sich lieber auf echte "Standards" einlassen sollte, umgekehrt von diesem M$-Müll aber unbedingt die Finger lassen sollte.

            <off topic>
            Was diese M$-Filter angeht, das wird sicherlich irgendwann auch in CSS Einzug finden, also in Standards-verträglicher Form umsetzbar und browserübergreifend verfügbar sein.
            </off topic>

            Was wohl IE7 wieder an neuem missionarischen pseudo-Standard-Quatsch anzubieten haben wird...?

            Meine Meinung.

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

          2. Hallo,

            Hm, ja MS sagt zu expression():
            "Use the expression() syntax to set an expression on a CSS attribute in HTML." Also schinbar gilt expression() nur im style="".

            mmh. Ne, die gehen auch in den Dateien.
            body { zoom:50%; } funktioniert in einer externen Stylesheet-Datei. Aber halt nicht für media=print.

            Dass body { zoom:50%; } geht ist klar, die Beschränkung bezieht sich auch nur auf die Verwendung von "expression()". Und im style="" funktioniert es auch beim Drucken, nur leider nicht in <style> -Block.

            Eventuell läßt sich dein Vorhaben über @page und page-breaks realisieren.

            Grüße
            Thomas

            --
            Surftip: kennen Sie schon Pipolino's Clowntheater?
            http://www.clowntheater-pipolino.net/
            1. Hi,

              Eventuell läßt sich dein Vorhaben über @page und page-breaks realisieren.

              Nein, leider nicht. Wie gesagt, bin ich ja auf ausschließlich IE angewiesen. @page interpretiert der nicht. Page-Break bringt mir auch leider nichts, da eine überbreite Tabelle gedruckt werden muss. Alle Daten sollen halt auf einem Blick sein und daher die Idee mit dem Zoom.
              Da das Thema schon sehr weit heruntergescrollt ist, denke ich mal, dass das hier keiner mehr liest und keine Ideen mehr zu erwarten sind. (Davon abgesehen, dass ich eh nicht mehr an eine Lösung glaube ;-)

              Daher bedanke ich mich bei Dir, Thomas, für Deine Hilfe. Und auch bei Felix, für den zwar weniger zielführenden, aber sicherlich völlig korrekten Beitrag ;-). Ich finde das selbst auch nicht gut, proprietären Funktionen zu nutzen. Manchmal können sie allerdings ganz hilfreich sein, wenn man sich festgefahren hat und keine bessere Lösung mehr (im vorhandenen Zeitrahmen) möglich ist. NUR, wenn so eine Situation mal auftritt, dann funktionieren diese Möglichkeiten nicht. Tja, so ist das.
              Ich hab jetzt einfach einen festen Zoom-Faktor von 75% eingestellt. Die größten Seiten passen dann genau aufs Blatt. Nur die kleineren Seite füllen das Blatt halt nicht aus :-(

              Schöne Grüße
              Axel

              1. Hallo Axel.

                Da das Thema schon sehr weit heruntergescrollt ist, denke ich mal, dass das hier keiner mehr liest und keine Ideen mehr zu erwarten sind.

                Dass du dich da mal nicht irrst. Bei mir ist dieser Thread hier recht weit oben. ;)

                (Davon abgesehen, dass ich eh nicht mehr an eine Lösung glaube ;-)

                Da es um den IE geht, sieht es leider auch schlecht aus. :(

                Gruß, Ashura

                --
                Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                30 Days to becoming an Opera8 Lover -- Day 16: Sessions
                Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                [Deshalb frei! - Argumente pro freie Software]
            2. hi,

              Dass body { zoom:50%; } geht ist klar, die Beschränkung bezieht sich auch nur auf die Verwendung von "expression()".

              aber auch das "funktioniert" normalerweise auch, wenn es in einer externen css-datei steht.

              ich vermute das problem eher hier:

              Falls das nochmal funktionieren sollte, kommt dort eine Berechnung rein, die den Zoom-Faktor anhand der Seitenbreite so berechnet, dass das Ganze auf eine Druckseite passt.

              was genau heißt "anhand der Seitenbreite" - body.offsetWidth o.ä.?

              ich vermute, dass eben die dort zur berechnung gewünschte eigenschaft nicht zur verfügung steht, wenn es ans drucken geht.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Hi,

                ich vermute das problem eher hier:
                was genau heißt "anhand der Seitenbreite" - body.offsetWidth o.ä.?

                ich vermute, dass eben die dort zur berechnung gewünschte eigenschaft nicht zur verfügung steht, wenn es ans drucken geht.

                Ja, eigentlich soll das anhand body.offsetWidth errechnet werden. Allerdings habe ich in weiser Vorraussicht das Ganze erstmal ohne Berechnung getestet. Also einfach zoom: expression('50%');
                Selbst das geht schon nicht in der print.css. In der Style-Datei für media=screen geht das jedoch problemlos.
                Also an den nicht zur Verfügung stehenden Variablen kann es an der Stelle (noch) nicht liegen.

                Vieln Dank und
                Schöne Grüße
                Axel