Drucken mehrerer XbpRtf auf die gleiche Seite

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Drucken mehrerer XbpRtf auf die gleiche Seite

Beitrag von UliTs »

Hallo,

ich möchte auf eine Seite mehrere Rtf-Texte
neben anderen Texten und Grafiken drucken.

Einen einzelnen Rtf-Text kann ich mit
XbpRtf:print()
auf eine Seite drucken.

Wie kann ich mehr als einen Rtf-Text (und
auch anderen Text und Grafiken) auf die
gleiche Seite drucken?

Ich glaube, es ist ein Bug in xBase++ 1.90.331

Bei meinem Testprogramm erfolgt der erste
Ausdruck richtig, der zweite jedoch spiegelverkehrt und in falscher Schriftgröße.

Ist dies bei anderen auch der Fall?
Weiß jemand eine Lösung?

Danke für die Hilfe.

Uli

Code: Alles auswählen

// XbpRtf-Test
#include "Xbp.ch"
#include "Gra.ch"
#include "activex.ch"

PROCEDURE main
LOCAL oXbpRtf,oPresSpace,oPrinter
  oXbpRtf := XbpRtf():new( ,,,,, .T.)
  oXbpRtf:create()
  oXbpRtf:TextRtf := "{\rtf1\ansi\ansicpg1252\deff0\deflang1031
{\fonttblf0\fnil\fcharset0 Arial;}}"+;
                     "\viewkind4\uc1\pard\fs16 Hallo!"+;
                     "\par"+;
                     "\par \ul\b\fs24 Alaska Team\ulnone\b0\fs16"+;
                     "\par }"
  oPrinter := XbpPrinter():new()
  oPrinter:Create()
  oPresSpace := XbpPresSpace():new()
  oPresSpace:create( oPrinter,{1900,2900},GRA_PU_LOMETRIC )

  // Printing is wrong:
  // Bei Zuweisung von oPrinter an den PresSpace
  // Ausdruck verkehrtherum, spiegelverkehrt und GrӇe falsch!
  oXbpRtf:Print( oPrinter )           

  oPresSpace:configure( NIL )
  // Printing is ok:
  oXbpRtf:Print( oPrinter )           // Druck ok

  oPresSpace:destroy()
  oPrinter:destroy()
  oXbpRtf:destroy()
  ? "Fertig!"
  WAIT
RETURN
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Ich habe soeben von Till Warweg erfahren,
daß die Routine XbpRtf():Print( oXbpPrinter ) nicht
korrekt funktioniert, wenn XbpPrinter mit einem
PresSpace-Objekt verbunden ist.

Sobald es eine Lösung gibt, werde ich hier berichten.

Uli
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Von Till Warweg habe ich eine sehr einfache Lösung zur Umgehung des Problem erhalten:

Das Problem ist, das XbpRtf():Print( oXbpPrinter ) das falsche Koordinatensystem benutzt, wenn XbpPrinter mit einem PresSpace-Objekt verbunden ist. Lösung mittels SetViewPort():

Code: Alles auswählen

    aPage := oPS:SetPageSize()[1]
    aVP   := oPS:SetViewPort()
    oPS:SetViewPort( {0,0,aPage[1],aPage[2]} )  
    oXbpRtf:PrintRect( oPS,{ 100,100,1000,1000} )
    ::SetViewPort( aVP )
So funktioniert mein XbpPreView jetzt auch mit Rtf-Blöcken. :)

Uli
Antworten