QTextDocument

Alles rund um die Programmierung mit Qt
Antworten
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

QTextDocument

Beitrag 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(); 
 
 }
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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...
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag 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
Dateianhänge
print.zip
(2.67 KiB) 202-mal heruntergeladen
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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..!
mikro
Beiträge: 60
Registriert: 19. April 2006 09:23
Wohnort: Erlangen
Kontaktdaten:

Beitrag 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?
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag 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.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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>
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag 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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

es gibt doch etwas referenzen in deutsch:
unten auf der seite...
http://de.wikipedia.org/wiki/XSL-FO
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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....
Antworten