I see much qt people not like the qt4 pdf print action ... to much bugs...
Landscape not work... QPrinter::Landscape and other...pdf items...
To convert document html/xml to pdf , rtf , latex , or other format.... is so easy.... xslt .. only need 2-3 file...
1- The base file xml/html:
http://qtexcel-xslt.sourceforge.net/...base_start.xml
2-3- The converter (intermediate convert html .. other convert to xml):
http://qtexcel-xslt.sourceforge.net/.../xmlsql2fo.xsl
If the base is clean ony 2 file required...
Last action bring the fop file result to { Formatting Objects Processor} fop Java.. qprocess..
(I think a C++ wrapper come released on the next 3-8 months ... so JAVA_HOME not needed.)
Make fo file .....
bool Gui_Starter
::Export2PDF( QString pdffile
) { /* tmp pdf RESULT_PDF_FILE */
/* CleanCachexslt(); */ /* clean file if exist */
CleanCachexslt();
bool ok;
int success;
ok = is_file( INCOMMINGFILE );
/*int totalt = CountTable();*/
/* ####### param to xslt converter #####################*/
const char* params[5];
params[0] = NULL;
params[1] = NULL;
params[2] = NULL;
params[3] = NULL;
params[4] = NULL;
success = Convert_XSLT( INCOMMINGFILE , (const xmlChar *)"http://qtexcel-xslt.sourceforge.net/converter/xmlsql2fo.xsl" , params );
if (success < 1 and ok) {
ok=Fopjava( SHORTFILE , RESULT_PDF_FILE );
}
QFile fpdf
( RESULT_PDF_FILE
);
if (!fpdf.copy( pdffile )) {
ok = false;
}
/* ####### param to xslt converter #####################*/
if (ok and success == 0) {
CleanCachexslt();
return true;
} else {
CleanCachexslt();
return false;
}
}
bool Gui_Starter::Export2PDF( QString pdffile )
{ /* tmp pdf RESULT_PDF_FILE */
/* CleanCachexslt(); */ /* clean file if exist */
CleanCachexslt();
bool ok;
int success;
ok = is_file( INCOMMINGFILE );
/*int totalt = CountTable();*/
/* ####### param to xslt converter #####################*/
const char* params[5];
params[0] = NULL;
params[1] = NULL;
params[2] = NULL;
params[3] = NULL;
params[4] = NULL;
success = Convert_XSLT( INCOMMINGFILE , (const xmlChar *)"http://qtexcel-xslt.sourceforge.net/converter/xmlsql2fo.xsl" , params );
if (success < 1 and ok) {
ok=Fopjava( SHORTFILE , RESULT_PDF_FILE );
}
QFile fpdf( RESULT_PDF_FILE );
if (!fpdf.copy( pdffile )) {
ok = false;
}
/* ####### param to xslt converter #####################*/
if (ok and success == 0) {
CleanCachexslt();
return true;
} else {
CleanCachexslt();
return false;
}
}
To copy to clipboard, switch view to plain text mode
Fop apache http://xmlgraphics.apache.org/fop/
make pdf....
/* external java fop setup & convert */
{
#if defined( Q_WS_X11 )
#ifndef JAVA_HOME
#define JAVA_HOME \
QString( "%1/" ).
arg( getenv("JAVA_HOME") ) #endif
#endif
#if defined( Q_WS_MACX )
QString JAVA_HOME
= "a1234";
/* mac other java handler on fop */ #endif
#if defined(Q_WS_WIN)
#ifndef JAVA_HOME
#define JAVA_HOME \
QString( "%1/" ).
arg( getenv("JAVA_HOME") ) #endif
#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 */
#if defined(Q_WS_WIN)
#else /* mac linux */
/* test "which fop" */
bindirapp = "/opt/fop/fop";
#endif
if (!is_file(bindirapp)) {
errormsg = "<p>Error...! </p><p>fop apache is not install... </p><p>download a copy from http://xmlgraphics.apache.org/fop/ </p><p>and copy to "+bindirapp+"</p>";
return false;
}
if (JAVA_HOME.size() > 3) {
process.
setReadChannelMode(QProcess::MergedChannels);
process.
start( bindirapp ,
QStringList() << fofile << pdffile
);
if (!process.waitForFinished()) {
errormsg = "Error...! Transormtation! \n" + process.errorString() + "\nprogramm " +bindirapp;
return false;
} else {
errormsg = "Success Transormtation! \n" + process.readAll() + "\nprogramm " +bindirapp;
return true;
}
} else {
errormsg = "Error...! JAVA_HOME not found on your OS";
return false;
}
}
/* external java fop setup & convert */
bool Gui_Starter::Fopjava( QString fofile , QString pdffile )
{
#if defined( Q_WS_X11 )
#ifndef JAVA_HOME
#define JAVA_HOME \
QString( "%1/" ).arg( getenv("JAVA_HOME") )
#endif
#endif
#if defined( Q_WS_MACX )
QString JAVA_HOME = "a1234"; /* mac other java handler on fop */
#endif
#if defined(Q_WS_WIN)
#ifndef JAVA_HOME
#define JAVA_HOME \
QString( "%1/" ).arg( getenv("JAVA_HOME") )
#endif
#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)) {
errormsg = "<p>Error...! </p><p>fop apache is not install... </p><p>download a copy from http://xmlgraphics.apache.org/fop/ </p><p>and copy to "+bindirapp+"</p>";
return false;
}
if (JAVA_HOME.size() > 3) {
QProcess process;
process.setReadChannelMode(QProcess::MergedChannels);
process.start( bindirapp , QStringList() << fofile << pdffile);
if (!process.waitForFinished()) {
errormsg = "Error...! Transormtation! \n" + process.errorString() + "\nprogramm " +bindirapp;
return false;
} else {
errormsg = "Success Transormtation! \n" + process.readAll() + "\nprogramm " +bindirapp;
return true;
}
} else {
errormsg = "Error...! JAVA_HOME not found on your OS";
return false;
}
}
To copy to clipboard, switch view to plain text mode
And ... automatic Landscape/Portrait by column count..
if moore as 8 cools landscape....
<!-- landscape or vertical? -->
<xsl:choose>
<xsl:when test="$bigcolumncount > 8">
<!-- landscape -->
<fo:layout-master-set>
<fo:simple-page-master master-name="simple" page-height="21cm" page-width="30cm"
margin-top="1cm" margin-bottom="0.3cm" margin-left="1.2cm" margin-right="1.2cm">
<fo:region-body margin-bottom="2cm"/>
<fo:region-after extent="16pt"/>
</fo:simple-page-master>
</fo:layout-master-set>
</xsl:when>
<xsl:otherwise>
<!-- vertical -->
<fo:layout-master-set>
<fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm"
margin-top="1cm" margin-bottom="0.3cm" margin-left="1.4cm" margin-right="1.2cm">
<fo:region-body margin-bottom="2cm"/>
<fo:region-after extent="16pt"/>
</fo:simple-page-master>
</fo:layout-master-set>
</xsl:otherwise>
</xsl:choose>
<!-- landscape or vertical? -->
<xsl:choose>
<xsl:when test="$bigcolumncount > 8">
<!-- landscape -->
<fo:layout-master-set>
<fo:simple-page-master master-name="simple" page-height="21cm" page-width="30cm"
margin-top="1cm" margin-bottom="0.3cm" margin-left="1.2cm" margin-right="1.2cm">
<fo:region-body margin-bottom="2cm"/>
<fo:region-after extent="16pt"/>
</fo:simple-page-master>
</fo:layout-master-set>
</xsl:when>
<xsl:otherwise>
<!-- vertical -->
<fo:layout-master-set>
<fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm"
margin-top="1cm" margin-bottom="0.3cm" margin-left="1.4cm" margin-right="1.2cm">
<fo:region-body margin-bottom="2cm"/>
<fo:region-after extent="16pt"/>
</fo:simple-page-master>
</fo:layout-master-set>
</xsl:otherwise>
</xsl:choose>
To copy to clipboard, switch view to plain text mode
Bookmarks