diff options
Diffstat (limited to 'filters/kword/latex/export/pixmapFrame.cpp')
-rw-r--r-- | filters/kword/latex/export/pixmapFrame.cpp | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/filters/kword/latex/export/pixmapFrame.cpp b/filters/kword/latex/export/pixmapFrame.cpp new file mode 100644 index 000000000..25f5951d7 --- /dev/null +++ b/filters/kword/latex/export/pixmapFrame.cpp @@ -0,0 +1,200 @@ +/* +** A program to convert the XML rendered by KWord into LATEX. +** +** Copyright (C) 2000, 2002 Robert JACOLIN +** +** This library is free software; you can redistribute it and/or +** modify it under the terms of the GNU Library General Public +** License as published by the Free Software Foundation; either +** version 2 of the License, or (at your option) any later version. +** +** This library is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** Library General Public License for more details. +** +** To receive a copy of the GNU Library General Public License, write to the +** Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +** +*/ + +#include <tqdir.h> +#include <kdebug.h> /* for kdDebug() stream */ +#include <config.h> +/* Needed to convert picture in eps file. Use ImageMagick. */ +#ifdef HAVE_MAGICK +# include <stdio.h> +# include <time.h> +# include <sys/types.h> +# include <magick/api.h> +#endif + +#include "document.h" +#include "pixmapFrame.h" +#include "fileheader.h" + +/*******************************************/ +/* Constructor */ +/*******************************************/ +PixmapFrame::PixmapFrame() +{ +} + +/*******************************************/ +/* Destructor */ +/*******************************************/ +PixmapFrame::~PixmapFrame() +{ + kdDebug(30522) << "Destruction of a pixmap" << endl; +} +void PixmapFrame::setKeepAspectRatio(const TQString ratio) +{ + if(ratio == "true") + _keepAspectRatio = true; + else + _keepAspectRatio = false; +} + +/*******************************************/ +/* analyse */ +/*******************************************/ +/* Get informations about a pixmap stored */ +/* in the tared file. */ +/*******************************************/ +void PixmapFrame::analyse(const TQDomNode balise) +{ + /* MARKUP TYPE : FRAMESET INFO = TEXTE, ENTETE CONNUE */ + + /* Parameters Analyse */ + Element::analyse(balise); + + kdDebug(30522) << "FRAME ANALYSE (Pixmap)" << endl; + + /* Chlidren markups Analyse */ + for(int index = 0; index < getNbChild(balise); index++) + { + if(getChildName(balise, index).compare("FRAME")== 0) + { + analyseParamFrame(balise); + } + else if(getChildName(balise, index).compare("PICTURE")== 0) + { + getPixmap(getChild(balise, "PICTURE")); + } + + } + kdDebug(30522) << "END OF A FRAME" << endl; +} + +/*******************************************/ +/* getPixmap */ +/*******************************************/ +/* Get informations about a pixmap stored */ +/* in the tared file. */ +/*******************************************/ +void PixmapFrame::getPixmap(const TQDomNode balise_initiale) +{ + kdDebug(30522) << "PIXMAP" << endl; + setKeepAspectRatio(getAttr(balise_initiale, "keepAspectRatio")); + TQDomNode balise = getChild(balise_initiale, "KEY"); + setKey(getAttr(balise, "filename")); + FileHeader::instance()->useGraphics(); + TQString file = getKey(); + /* Remove the extension */ + int posExt = file.findRev('.'); + file.truncate(posExt); + /* Remove the path */ + file = file.section('/', -1); + setFilenamePS(file + ".eps"); + kdDebug(30522) << "PS : " << getFilenamePS() << endl; + kdDebug(30522) << "END PIXMAP" << endl; +} + +/*******************************************/ +/* analyseParamFrame */ +/*******************************************/ +void PixmapFrame::analyseParamFrame(const TQDomNode balise) +{ + /*<FRAME left="28" top="42" right="566" bottom="798" runaround="1" />*/ + + _left = getAttr(balise, "left").toInt(); + _top = getAttr(balise, "top").toInt(); + _right = getAttr(balise, "right").toInt(); + _bottom = getAttr(balise, "bottom").toInt(); + setRunAround(getAttr(balise, "runaround").toInt()); + setAroundGap(getAttr(balise, "runaroundGap").toInt()); + setAutoCreate(getAttr(balise, "autoCreateNewFrame").toInt()); + setNewFrame(getAttr(balise, "newFrameBehaviour").toInt()); + setSheetSide(getAttr(balise, "sheetside").toInt()); +} + +/** + * Convert a pixmap file in eps file. Use ImageMagick + */ +void PixmapFrame::convert() +{ +#ifdef HAVE_MAGICK + kdDebug(30522) << "CONVERT PICTURE IN EPS" << endl; + ExceptionInfo exception; + + Image* image; + + ImageInfo + *image_info; + + /* + Initialize the image info structure and read an image. + */ + InitializeMagick(NULL); + GetExceptionInfo(&exception); + image_info = CloneImageInfo((ImageInfo *) NULL); + // 8 characters are deleted when readign the file picture name + TQString filename = "file:///" + getRoot()->extractData(getKey()); + strncpy(image_info->filename, filename.latin1(), filename.length()); + image = ReadImage(image_info, &exception); + if (image == (Image *) NULL) + MagickError(exception.severity, exception.reason, exception.description); + else + { + /* + Write the image as EPS and destroy it. + Copy image file in the same directory than the tex file. + */ + TQString dir = ""; + if( Config::instance()->getPicturesDir().isEmpty() || + Config::instance()->getPicturesDir() == NULL) + { + dir = getFilename(); + dir.truncate(getFilename().findRev('/')); + } + else + dir = Config::instance()->getPicturesDir(); + kdDebug(30522) << "file " << getFilename() << endl; + kdDebug(30522) << "path " << dir << endl; + (void) strcpy(image->filename, (dir + "/" + getFilenamePS()).latin1()); + WriteImage(image_info, image); + DestroyImage(image); + } + DestroyImageInfo(image_info); + DestroyExceptionInfo(&exception); + DestroyMagick(); + kdDebug(30522) << "CONVERTION DONE" << endl; +#endif +} + +/*******************************************/ +/* generate */ +/*******************************************/ +/* Generate the text formated (if needed). */ +/*******************************************/ +void PixmapFrame::generate(TQTextStream &out) +{ + if(Config::instance()->convertPictures()) + convert(); + + Config::instance()->writeIndent(out); + out << "\\includegraphics{" << getFilenamePS()<< "}" << endl; + +} + |