none
ShowHtmlDialogEx mit Print Template

    Frage

  • Um ein im Code generiertes HTML-Dokument (IHTMLDocument2) zu drucken und in einer Druckvorschau anzuzeigen möchte ich ein eigenes Print-Template verwenden.

    Es gibt ja die Möglichkeit dieses über den Exec mit IDM_PRINTPREVIEW zu machen. Dies funktioniert an sich auch, jedoch wird dabei immer eine temporäre html-Datei im Temp-Ordner erzeugt. Dies möchte ich gerne vermeiden. Gibt es da eine Möglichkeit?

    Ich habe auch schon versucht das ganze über ShowHtmlDialogEx und den entsprechenden Eingabeparametern zu machen. Dabei kann man ja das Argument __IE_BrowseDocument festlegen. Dies sollte dem Print Template dann als Content dienen. Jedoch funktioniert das Ganze nur, wenn ich die HTML-Datei speichere und diese dann in __IE_ContentDocumentURL übergebe. Dann wird die Html-Datei im Print Template auch angezeigt. Geht es irgendwie auch ohne diese temporäre Datei?

    Für einen Tip wäre ich sehr dankbar.

    Daniela

    Sonntag, 6. Januar 2013 10:29

Antworten

  • Vielen Dank für deine Hilfe. Dass es C++ sein muss, ist kein Problem. Genau das möchte ich machen.

    Es gibt also die Möglichkeit das ganze mit ShowHTMLDialogEx und einem Pfad zum eigenen Print Template zu machen, dann kann ich Header, Footer usw. auch selbst definieren, muss mich aber auch selbst darum kümmern, eine temporäre Datei zu erzeugen und diese in den Argumenten mitzugeben, oder man verwendet Exec mit IDM_PRINTPREVIEW mit eigenem Template, kann dann aber nicht individuell Header und Footer übergeben, sondern müsste diese fest im Template definieren.

    Dienstag, 15. Januar 2013 16:27
  • Habe vom IE Team grade die Mitteilung bekommen, daß Drucken ohne temporäre
    Datei definitiv nicht funktioniert.
     
     

    IEFAQ: http://iefaq.info
    Samstag, 12. Januar 2013 22:30
    Beantworter

Alle Antworten

  • Hallo Daniela,

    Mit IDM_PRINTPREVIEW muss Du die Pfad zu deinem Print-Template liefern.

    Gruss,

    Ionut

    Dienstag, 8. Januar 2013 09:35
    Besitzer
  • Hallo,

    danke für die Antwort. Ich weiß, dass man dann den Pfad zum Print-Template übergeben muss.

    Um auch Header,Footer, Parent-HWND zu übergeben, würde ich das Ganze gerne mit ShowHTMLDialogEx machen. Dort kann man in __IE_BrowseDocument das zu druckende HTML-Dokument übergeben.

    Zusätzlich scheint es aber unbedingt notwendig zu sein über __IE_ContentDocumentURL noch den Pfad zur HTML-Datei zu übergeben. Hier frage ich mich, ob das denn unbedingt notwendig ist, da man dazu das erzeugte HTML erstmal als Datei speichern müsste. Dabei übergibt man das Dokument ja schon in dem anderen Argument.

    Gibt es hier eine Lösung, ohne die Datei zunächst auf Festplatte zu speichern?

    Danke,

    Daniela

    @Robert: ich habe in diesem Blog die gleiche Frage gestellt, da sich Marc auch schon einmal mit dem Thema beschäftigt hat.

    Freitag, 11. Januar 2013 09:04
  • Schon mal mit irgendeiner URL für ContentDocumentURL probiert?  z.B.
    about:blank?
     
     

    IEFAQ: http://iefaq.info
    Freitag, 11. Januar 2013 18:22
    Beantworter
  • Ja, auch schon probiert. Dann wird zwar das PrintTemplate angezeigt, aber mit leerer Seite als Inhalt. Ich habe es auch schon versucht "about:<html><head>Bla</head></html>" als ContenDocumentURL zu verwenden. Das scheint auch zu funktionieren. Allerdings gibt es dafür scheinbar eine Längenbegrenzung. Mit längeren HTML-Dokumenten klappt das nicht.

    Samstag, 12. Januar 2013 19:38
  • Habe vom IE Team grade die Mitteilung bekommen, daß Drucken ohne temporäre
    Datei definitiv nicht funktioniert.
     
     

    IEFAQ: http://iefaq.info
    Samstag, 12. Januar 2013 22:30
    Beantworter
  • Hallo,

    danke für die Antwort. Wenn man es nun mit Exec und IDM_PRINT/IDM_PRINTPREVIEW realisiert, dann kann man als Eingabe-Argument den Pfad zum Printtemplate übergeben.

    Es gibt wohl auch die Möglichkeit, stattdessen ein Array zu übergeben mit Header,Footer, usw.

    Geht auch beides? Also den Pfad zu einem eigenen Printtemplate und Header,Footer zusätzlich übergeben? Oder bleibt dann nur die Möglichkeit mit ShowHtmlDialogEx, wo man die dialogArguments übergeben kann?

    Danke.

    Sonntag, 13. Januar 2013 20:56
  • Das kann ich leider nicht beantworten, ist nicht mein Gebiet. Wenn du das
    auf Englisch auf vielleicht drei Sätze eingrenzen und umformulieren
    kannst, so daß es alle nötigen Informationen enthält, oder Code hast, kann
    ich es gerne einfach so weiterleiten und kann dir dann evtl. auch ne
    Antwort zurückgeben. Ansonsten wirst du denke ich, immer im Bereich der
    Programmiersprache, auch im engl. Bereich, mehr Leser finden, die dir
    weiterhelfen können, als im spezialisierten IE-Forum. Hier ist der Andrang
    doch sehr dünn und ich befasse mich mehr mit Webentwicklung ;-)
     
     

    IEFAQ: http://iefaq.info
    Montag, 14. Januar 2013 12:53
    Beantworter
  • Danke trotzdem für deine Antworten. Dann werde ich es an anderer Stelle versuchen. Formulieren würde ich es so: "Is it possible to use the Exec command with IDM_PRINT/IDM_PRINTPREVIEW with specifying Header,footer AND the path to a customized print template? I found only a description where input argument is a string (path to print template) or an array of strings (header,footer,etc.), but no way to specify both. Danke jedenfalls für den Hilfeversuch ;-)
    Montag, 14. Januar 2013 22:56
  • Danke trotzdem für deine Antworten. Dann werde ich es an anderer Stelle versuchen. Formulieren würde ich es so: "Is it possible to use the Exec command with IDM_PRINT/IDM_PRINTPREVIEW with specifying Header,footer AND the path to a customized print template? I found only a description where input argument is a string (path to print template) or an array of strings (header,footer,etc.), but no way to specify both. Danke jedenfalls für den Hilfeversuch ;-)

    Hallo Dani.80,

    Wenn ich mir die IDM_PRINT Command ID ansehe dann steht folgendes für den dritten Parameter des ExecWB

    „Remarks

    If pvaIn is a VARIANT of type VT_BSTR, pvaIn specifies the path to a custom print template. If no template path is supplied, MSHTML uses the default print template.

    If pvaIn is a VARIANT of type VT_I2, pvaIn can be set with the flags PRINT_DONTBOTHERUSER(0x01) and PRINT_WAITFORCOMPLETION(0x02) defined in mshtmhst.h. If 0 is specified, then the default behavior (show print dialog and do not wait for completion) occurs unless otherwise defined by the nCmdExecOpt parameter. The flags specified in the pvaIn parameter are given precedence over the OLECMDEXECOPT flags specified in the nCmdExecOpt parameter. For example, if both PRINT_DONTBOTHERUSER and OLECMDEXECOPT_PROMPTUSER are specified, PRINT_DONTBOTHERUSER has precedence and the print dialog is not displayed.

    If pvaIn is a VARIANT of type VT_ARRAY, pvaIn specifies a SAFEARRAY containing (in the following order) a header BSTR, a footer BSTR, the address of an IStream pointer for a Microsoft Outlook Express header document, an alternate URL  BSTR used for MSHTML in Outlook Express, and a DWORD containing flags.

    Dieser Parameter (in Gelb oben) ist ein Variant of type VT_ARRAY…also VB.NET oder C# kommt nicht in Frage (oder Du machst Dir ein unmanaged wrapper library und rufst nachher die C++ wrap library in .NET)

    Es muss über C++ gemacht werden: How to print custom headers and footers for a WebBrowser control in Internet Explorer

    Noch zum lesen:

    Beyond Print Preview: Print Customization for Internet Explorer 5.5 – Hier unter http://msdn.microsoft.com/en-us/library/bb250434(VS.85).aspx#beyondprintpreview_topic2 lies bei Adding Headers and Footers with the HeaderFooter Behavior und schau Dir das Beispiel aus diesem Artikel an à Download spiffy sample application (Note: You must choose the "Save this program to disk" option to run this application successfully.) …also was ich von hier verstehe ist dass custom headers and footers are defined into a print template html document und eine Kombination von IDM_PRINT/IDM_PRINTPREVIEW with specifying Header,footer AND the path to a customized print template nicht möglich ist.

    Print Preview 2: The Continuing Adventures of Internet Explorer 5.5 Print Customization

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 15. Januar 2013 10:04
    Besitzer
  • Vielen Dank für deine Hilfe. Dass es C++ sein muss, ist kein Problem. Genau das möchte ich machen.

    Es gibt also die Möglichkeit das ganze mit ShowHTMLDialogEx und einem Pfad zum eigenen Print Template zu machen, dann kann ich Header, Footer usw. auch selbst definieren, muss mich aber auch selbst darum kümmern, eine temporäre Datei zu erzeugen und diese in den Argumenten mitzugeben, oder man verwendet Exec mit IDM_PRINTPREVIEW mit eigenem Template, kann dann aber nicht individuell Header und Footer übergeben, sondern müsste diese fest im Template definieren.

    Dienstag, 15. Januar 2013 16:27
  • Hallo Dani.80,

    Freut mich dass wir Dir weiterhelfen könnten.

    Wenn Du es fertig hast, es wäre schön und hilfreich, wenn Du posten würdest wie es funktioniert hat, denn dann profitieren unter Umständen andere mit dem gleichen Problem davon.

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 15. Januar 2013 16:36
    Besitzer