Seite 1 von 1

QTextDocument

Verfasst: 16. April 2006 12:47
von Marco812
Hi,
ich versuche ein "QTextDocument" zu drucken, aber die Seitenzahl ist immer 1.

Wie kann ich die richtige Seitenzahl oder keine Seitenzahl drucken?
Wie kann ich die Seitenränder einstellen?

Gruß,

Marco812

Code: Alles auswählen

 QString print;
 
 print.append("<table border=\"0\" width=\"100%\">");
 print.append("<tr><td width=\"50%\">Table1</td>");
 print.append("<td width=\"50%\">Page1</td></tr>");
 print.append("</table>");
 
 print.append("<br><ff/>");
 
 print.append("<table border=\"1\" width=\"100%\">");
 print.append("<tr><td width=\"50%\">Table2</td>");
 print.append("<td width=\"50%\">Page2</td></tr>");
 print.append("</table>");
 
 MyPrinter* printer = new MyPrinter(this);
 printer->print(print);

Code: Alles auswählen

 QPrinter printer(QPrinter::HighResolution);
 printer.setFullPage(TRUE);
 printer.setOutputFormat(QPrinter::PdfFormat);
 printer.setOutputFileName(fileName);
 QStringList sl = printString.split("<ff/>", QString::SkipEmptyParts); 
 for (int i=0; i<sl.count(); i++) 
 { 
 
  textEdit.setHtml(sl[i]); 
  textEdit.document()->print(&printer); 
  printer.newPage(); 
 
 }

Verfasst: 18. April 2006 13:46
von patrik08
du must doch alles angeben wie :....
QPrinter::A4 QPrinter::FirstPageFirst hight resolution ecc..
wie im qt4 demo demos\textedit oder?

im demo kommen 2 seiten ... ist aber wiel text... und sind nummeriert!
wen du hoch qualitaet willst http://xmlgraphics.apache.org/fop/ auch mit xml
bilder pdf formulare db resultate ecc...

Verfasst: 22. April 2006 13:57
von Marco812
Hi,

ja in dem QT-Beispiel funktioniert es auch nur bei mir nicht, wenn ich die Seiten trenne, sieht Beispiel. Wie kann ich denn die Seitenränder einstellen und die richtige Nummerierung.

Gruß

Maroc812

Verfasst: 22. April 2006 16:18
von patrik08
Qt kann nur html & text bearbeiten...

und den <ff/> tag ist keine seitenumbruch tag! ausser die seite bricht um da kein platz....mehr...

wenn du saubere pdf machen willst dann kenne ich als die einfachste simple methode.. nur http://www.zvon.org/xxl/xslfoReference/ ... index.html respektiv ... http://xmlgraphics.apache.org/fop/ ....
mit fop kannst du sogar ein punkt schreiben (.) und dann seiteumbruch machen...

Ich habe qt projekte gesehen ( openfaktura linux oder faktura linux) die sogar den qt designer mitgeben um muster formulare zu machen... damit eine pdf rauskommt... die bessere qt pro.. brauchen latex ... als es noch keine xml fop gab... aber von xml fop oder xslt-fo hort man sehr wenig da noch nicht 2 jahre alt..

Aus meinem buch http://www.amazon.de/exec/obidos/ASIN/3 ... 48-2909808
habe ich paar beispiele geladen.... im fo und pdf format ... http://ciz.ch/svnciz/xls2sql/fop/ dort ist alles moeglich... sogar pdf formularen ...

bei html gibt es einfach kein seitenumbruch..!

Verfasst: 23. April 2006 08:51
von mikro
patrik08 hat geschrieben:bei html gibt es einfach kein seitenumbruch..!
nicht in Html, aber deswegen kann man beim Druck einer HTML-Seite trotzdem einen Seitenumbruch erzwingen, indem man einfach den entsprechenden ASCII-Code ausgibt. Hilft das vielleicht hier auch?

Verfasst: 23. April 2006 13:28
von Marco812
Hallo,

in ASCII wäre es dann "& #12;" oder "& #012;" ist das richtig? Ich habe beides versucht, funktioniert aber nicht.

Gruß

Marco812

P.S.
zwischen "&" und "#" hatte ich kein Leerzeichen, das habe ich jetzt nur so geschrieben, da es sonst als html erkannt wird und nicht dargestellt.

Verfasst: 23. April 2006 15:17
von patrik08
suche mal pdf in ...

http://www.trolltech.com/developer/tasktracker.html

oder direkt =>
http://www.trolltech.com/developer/task ... y&id=80379

wenn qt das html css kennt kannst du probieren tabellen 19cm (a4) hoch zu machen

mache eine resource datei html im designer und lese sie aus file ein normale file ....

file_get_contents(QString::fromUtf8(":/root/excel2003.xsl") ) // readonly...

Code: Alles auswählen


<table border="0" cellspacing="2" cellpadding="2" style="width: 15cm; height: 19cm;">
<tr>
    <td>ein punkt.  .</td>
</tr>
</table>

Verfasst: 27. April 2006 21:45
von Marco812
Hallo,

habe es jetzt mit xml gemacht. Hätte allerdings noch eine kleine Frage dazu, wo bei das jetzt nicht direkt QT betrifft.

Kann ich in der xml Datei festlegen, wann ein Seitenumbruch beginnen soll?

Gruß

Marco812

Verfasst: 28. April 2006 01:19
von patrik08
sicher im xsl-fo...

break-after , break-before die volle referens ... http://www.zvon.org/xxl/xslfoReference/ ... index.html
ist 30 mal einfacher zu lernen als qt4

Code: Alles auswählen

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" >
     <fo:layout-master-set>
          <fo:simple-page-master page-height="11in" page-width="8.5in" margin-left="1.0in" margin-top="0.2in" margin-bottom="1.0in" margin-right="1.0in" master-name="test-page-master">
               <fo:region-body margin-left="1.0in" margin-top="0.2in" margin-right="1.0in" margin-bottom="1.0in"/>
          </fo:simple-page-master>
     </fo:layout-master-set>
     <fo:page-sequence master-name="test-page-master">
          <fo:flow flow-name="xsl-region-body">
               <fo:block-container break-after="page">
                    <fo:block>This test generate two pages. This text appear on the first page</fo:block>
               </fo:block-container>
               <fo:block-container>
                    <fo:block>This text appear on the second page.</fo:block>
               </fo:block-container>
          </fo:flow>
     </fo:page-sequence>
</fo:root>
seiten nummerieren so..
im block "xsl-region-after am fuss der seite oder befor am kopf der seite....

Code: Alles auswählen

  <fo:block>
	  <xsl:attribute name="text-align">end</xsl:attribute>
	<xsl:attribute name="font-size">10pt</xsl:attribute>
	<xsl:attribute name="font-family">Helvetica</xsl:attribute>
	<xsl:attribute name="color"><xsl:value-of select="$hellgrau"/></xsl:attribute>
	<xsl:attribute name="padding-before">10pt</xsl:attribute>
    Seite <fo:page-number/>
    </fo:block>

<!--  pdf bookmark so -->

<!-- make bookmark! -->
<xsl:template name="bookimarker">
<fox:outline internal-destination="tipx12">
<fox:label>BSA Member Liste</fox:label>
<xsl:for-each select="/bsa/field/rows">
<xsl:variable name="anzahl" select="child::MG" />
<xsl:variable name="forma" select="child::Anrede" />
<xsl:variable name="cognome" select="child::NName" />
<xsl:variable name="nome" select="child::Vorname" /> 
<xsl:text>
	
</xsl:text>
<fox:outline>
<xsl:attribute name="internal-destination"><xsl:value-of select="concat('tipx', $anzahl)"/></xsl:attribute>
<fox:label><xsl:value-of select="concat($forma, ' ', $cognome,' ',$nome)"/>
</fox:label>
</fox:outline>
</xsl:for-each>
</fox:outline>
</xsl:template>
<!-- make bookmark! --


wen du nicht gut vertraut bist mit xml .... schreibe alles ins richtige xhtml wie qt richtexteditor.... dann transormierst es nach xsl-fo ... mit diesem file... http://webcoder.info/downloads/xhtml2fo.html xhtml2fo.xsl und am ende zu pdf ....

und mit qt den fo file zum hocwertigem pdf bringen...

Code: Alles auswählen

/* external java fop setup & convert */
bool Xslt_Proc::Fopjava( QString fofile , QString pdffile )
{
#ifndef JAVA_HOME
#define JAVA_HOME \
              QString( "%1/" ).arg( getenv("JAVA_HOME") )
#endif
   
     /*   http://xmlgraphics.apache.org/fop/  only java api
    http://mirror.switch.ch/mirror/apache/dist/xmlgraphics/fop/binaries/fop-0.92beta-bin-jdk1.4.zip */

    QString bindirapp;
    #if defined(Q_WS_WIN)
    bindirapp = QCoreApplication::applicationDirPath()+"/fop/fop.bat";
    #else /* mac linux */
    /* test "which fop" */
    bindirapp = "/opt/fop/fop";
    #endif
      if (!is_file(bindirapp)) {
      xslterrormsg = "Error...! fop apache is not install... download a copy on http://xmlgraphics.apache.org/fop/ and copy to "+bindirapp;   
      return false;
      }
     
      if (JAVA_HOME.size() > 3) {
         
        QProcess process;
        process.setReadChannelMode(QProcess::MergedChannels);
        process.start( bindirapp ,  QStringList() << fofile << pdffile);
         if (!process.waitForFinished()) {
          xslterrormsg = "Error...! Transormtation! \n" + process.errorString() + "\nprogramm " +bindirapp;
          return false;
         } else {
          xslterrormsg = "Success Transormtation! \n" + process.readAll() + "\nprogramm " +bindirapp;
          return true;
         }
      } else {
      xslterrormsg = "Error...! JAVA is not install.....";
      return false;
      }
} 

wenn du dich mit xml schnell zurecht findest mache deine eigene tag...
<para/> +8 attribute
<bold/>
<italic/>
<link/> +2 attribute
<center/>
<seiteumbruch/>
<title/>
<subtitle/>
<image/> +4 attribute

und dann ein ein converter schreiben zu xsl-fo mit deine regeln bilder ecc...

publiziere sonst irgenwo im netz deine beispiel xml...

oder noch ein beispiel ... von sql zu xml und dan zu pdf mit bookmark...

http://ciz.ch/svnciz/xls2sql/fas_bsa_pdf.xsl

Verfasst: 28. April 2006 01:31
von patrik08
es gibt doch etwas referenzen in deutsch:
unten auf der seite...
http://de.wikipedia.org/wiki/XSL-FO

Verfasst: 15. Mai 2006 10:25
von patrik08
heute ist auch ein ausfuerlicher artikel von xsl-fo erschinen auf
http://php-mag.de/itr/ausgaben/psecom,i ... id,60.html

XSL:FO – eine Alternative zu FPDF
Vorstellung von XSL:FO und Vergleich mit FPDF

6 seiten auf der mag....