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 = '
CSS1Compat'
then
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ß