AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TWebBrowser druckt auf mehreren Seiten.

Ein Thema von vit4l · begonnen am 6. Dez 2013 · letzter Beitrag vom 11. Dez 2013
 
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#6

AW: TWebBrowser druckt auf mehreren Seiten.

  Alt 10. Dez 2013, 23:53
Hallo,

Zitat:
[...] Über mein Programm wird der Inhalt auf mehreren Seiten ausgedruckt. Navigiere ich allerdings mit IExplorer oder Mozzilla und drucke von dort aus wird nur eine Seite gedruckt [...]
Ich vermute, dass die TWebBrowser-Instanz im Kompatibilitätsmodus läuft (ein fehlendes oder fehlerhaftes <!DOCTYPE oder Fehler im Quellcode reichen schon aus), wohingegen der IE o. ä. wohl im Standardmodus läuft. Dann gibt es Unterschiede im Rendering der Seite, was dann auch zu unterschiedlichen Druckausgaben führt.

Ob dem so ist kannst Du ja mal ausprobieren. Mit:
Delphi-Quellcode:
procedure TForm1.Button1Click (Sender : TObject);
var
  d : IHTMLDocument3;
begin
  if Assigned (WebBrowser1.Document) then
    begin
      d := WebBrowser1.Document as IHTMLDocument3;
      if Assigned (d) then
        ShowMessage (d.compatMode)
    end;
end;
kannst Du Dir anzeigen lassen in welchem Modus die TWebBrowser-Instanz gerade läuft (BackCompat = Kompatibilitätsmodus) und die aktuell geladene Seite anzeigt.

Mit:
Code:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
kannst Du den IE "überreden" nicht in den Kompatibilitätsmodus zu schalten. Das setzt allerdings voraus, dass Du den HTML-Code manipulieren kannst.

Vermutlich hast Du diese Möglichkeit aber nicht. Wenn dem so ist, dann könntest Du das Meta-Tag dem IE aber sozusagen "unterjubeln"; das könnte z. B. so funktionieren:
Delphi-Quellcode:
function GetBrowserCompatMode (const WebBrowser : TWebBrowser) : Integer;
var
  d : IHTMLDocument5;
begin
  Result := -1;
  if not Assigned (WebBrowser) then
    Exit;

  d := WebBrowser.Document as IHTMLDocument5;
  if not Assigned (d) then
    Exit;

  if d.compatMode = 'CSS1Compatthen
    Result := htmlCompatModeCSS1Compat
  else
    Result := htmlCompatModeBackCompat
end;

procedure ReplaceHtmlDocument (const WebBrowser : TWebBrowser; const Html : string);
var
  d : IHTMLDocument2Disp;
begin
  if Assigned (WebBrowser) then
    begin
      d := WebBrowser.Document as IHTMLDocument2Disp;
      if Assigned (d) then
        begin
          d.open ('text/html', '_self', '', 'true');
          d.writeln (Html)
        end;
    end
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);
var
  d : IHTMLDocument3;
  s : string;
  p, q : Integer;
  c : Char;
begin
  if GetBrowserCompatMode (WebBrowser1) = htmlCompatModeBackCompat then
    begin
      d := WebBrowser1.Document as IHTMLDocument3;
      if Assigned (d) then
        begin
          s := d.documentElement.outerHTML;

          // Die Suche nach der passenden Einfügestelle nur rudimentär
          p := PosEx ('<HEAD', s);
          if p = 0 then
            Exit;

          Inc (p, 5);
          q := PosEx ('<META', s, p);
          if q > 0 then
            Insert ('<base href="' + URL + '"><meta http-equiv="X-UA-Compatible" content="IE=edge">', s, p + 1)
          else
            begin
              c := s [p];
              while (c <> '>') and (c <> #0) do
                begin
                  Inc (p);
                  c := s [p]
                end;

              if c = '>then
                Insert ('<base href="'+ URL + '"><meta http-equiv="X-UA-Compatible" content="IE=edge">', s, p + 1)
              else
                s := ''
            end;

          if s <> 'then
            ReplaceHtmlDocument (WebBrowser1, s)
        end
    end
end;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz