diff options
| author | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
|---|---|---|
| committer | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
| commit | 7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch) | |
| tree | 4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/pdflib_core.h | |
| download | scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip | |
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/pdflib_core.h')
| -rw-r--r-- | scribus/pdflib_core.h | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/scribus/pdflib_core.h b/scribus/pdflib_core.h new file mode 100644 index 0000000..8a58f81 --- /dev/null +++ b/scribus/pdflib_core.h @@ -0,0 +1,297 @@ +/* +For general Scribus (>=1.3.2) copyright and licensing information please refer +to the COPYING file provided with the program. Following this notice may exist +a copyright and/or license notice that predates the release of Scribus 1.3.2 +for which a new license (GPL+exception) is in place. +*/ + +#ifndef PDFLIBCORE_H +#define PDFLIBCORE_H + +#include <QFile> +#include <QDataStream> +#include <QPixmap> +#include <QList> +#include <string> +#include <vector> + +class QImage; +class QRect; +class QString; +class QTextCodec; +class PageItem; +class BookMItem; +class BookMView; +class ScribusDoc; +class Page; +class PDFOptions; +class PrefsContext; +class MultiProgressDialog; +class ScText; + +#include "scribusstructs.h" +#include "scimagestructs.h" + +#ifdef HAVE_PODOFO +#include <podofo/podofo.h> +#endif + + +/** + * PDFLibCore provides Scribus's implementation of PDF export functionality. + * + * This is not public API and is not exported in Scribus's symbol table on supporting + * platforms. Do not include this header, use pdflib.h instead. Including this header + * from anywhere except pdflib.cpp may cause linker errors and other problems, + * and is totally pointless since all the interfaces that are publically + * visible are presented by PDFlib anyway. + * + *@author Franz Schmid + */ + +class PDFLibCore : public QObject +{ + Q_OBJECT + +public: + explicit PDFLibCore(ScribusDoc & docu); + ~PDFLibCore(); + bool doExport(const QString& fn, const QString& nam, int Components, + const std::vector<int> & pageNs, const QMap<int,QPixmap> & thumbs); + + const QString& errorMessage(void) const; + bool exportAborted(void) const; + +private: + struct ShIm + { + int ResNum; + int Width; + int Height; + int Page; + double reso; + double sxa; + double sya; + double xa; + double ya; + double origXsc; + double origYsc; + QMap<int, ImageLoadRequest> RequestProps; + }; + + bool PDF_Begin_Doc(const QString& fn, SCFonts &AllFonts, QMap<QString, QMap<uint, FPointArray> > DocFonts, BookMView* vi); + void PDF_Begin_Page(const Page* pag, QPixmap pm = 0); + void PDF_End_Page(int physPage); + bool PDF_TemplatePage(const Page* pag, bool clip = false); + bool PDF_ProcessPage(const Page* pag, uint PNr, bool clip = false); + bool PDF_End_Doc(const QString& PrintPr = "", const QString& Name = "", int Components = 0); + bool closeAndCleanup(); + + void PDF_Error(const QString& errorMsg); + void PDF_Error_WriteFailure(void); + void PDF_Error_ImageLoadFailure(const QString& fileName); + void PDF_Error_ImageWriteFailure(const QString& fileName); + void PDF_Error_MaskLoadFailure(const QString& fileName); + void PDF_Error_InsufficientMemory(void); + + QByteArray EncodeUTF16(const QString &in); + QString EncStream(const QString & in, int ObjNum); + QString EncString(const QString & in, int ObjNum); + QString EncStringUTF16(const QString & in, int ObjNum); + + bool EncodeArrayToStream(const QByteArray& in, int ObjNum); + + int WriteImageToStream(ScImage& image, int ObjNum, bool cmyk, bool gray, bool precal); + int WriteJPEGImageToStream(ScImage& image, const QString& fn, int ObjNum, bool cmyk, bool gray, bool sameFile, bool precal); + int WriteFlateImageToStream(ScImage& image, int ObjNum, bool cmyk, bool gray, bool precal); + + void CalcOwnerKey(const QString & Owner, const QString & User); + void CalcUserKey(const QString & User, int Permission); + QString FitKey(const QString & pass); + + QString setStrokeMulti(struct SingleLine *sl); + QString SetClipPathArray(FPointArray *ite, bool poly = true); + QString SetClipPathImage(PageItem *ite); + QString SetClipPath(PageItem *ite, bool poly = true); + QString SetColor(const QString& farbe, double Shade); + QString SetColor(const ScColor& farbe, double Shade); + QString SetGradientColor(const QString& farbe, double Shade); + QString putColor(const QString& color, double Shade, bool fill); + QString putColorUncached(const QString& color, int Shade, bool fill); + QString Write_TransparencyGroup(double trans, int blend, QString &data); + QString setTextSt(PageItem *ite, uint PNr, const Page* pag); + bool setTextCh(PageItem *ite, uint PNr, double x, double y, uint d, QString &tmp, QString &tmp2, const ScText * hl, const ParagraphStyle& pstyle, const Page* pag); + void getBleeds(const Page* page, double &left, double &right); + void getBleeds(const Page* page, double &left, double &right, double &bottom, double& top); + + // Provide a couple of PutDoc implementations to ease transition away from + // QString abuse and to provide fast paths for constant strings. + void PutDoc(const QString & in) { outStream.writeRawData(in.toLatin1(), in.length()); } + void PutDoc(const QByteArray & in) { outStream.writeRawData(in, in.size()); } + void PutDoc(const char* in) { outStream.writeRawData(in, strlen(in)); } + void PutDoc(const std::string & in) { outStream.writeRawData(in.c_str(), in.length()); } + + void PutPage(const QString & in) { Content += in; } + void StartObj(int nr); + uint newObject() { return ObjCounter++; } + uint WritePDFStream(const QString& cc); + uint WritePDFString(const QString& cc); + void writeXObject(uint objNr, QString dictionary, QByteArray stream); + uint writeObject(QString type, QString dictionary); + uint writeGState(QString dictionary) { return writeObject("/ExtGState", dictionary); } + uint writeActions(const Annotation&, uint annotationObj); +// QString PDFEncode(const QString & in); + QByteArray ComputeMD5(const QString& in); + QByteArray ComputeRC4Key(int ObjNum); + + bool PDF_ProcessItem(QString& output, PageItem* ite, const Page* pag, uint PNr, bool embedded = false, bool pattern = false); + QString PDF_ProcessTableItem(PageItem* ite, const Page* pag); + QString drawArrow(PageItem *ite, QMatrix &arrowTrans, int arrowIndex); + void PDF_Bookmark(PageItem *currItem, double ypos); + bool PDF_Gradient(QString& output, PageItem *currItem); + QString PDF_DoLinGradient(PageItem *currItem, QList<double> Stops, QList<double> Trans, const QStringList& Colors, QStringList colorNames, QList<int> colorShades); + QString PDF_TransparenzFill(PageItem *currItem); + QString PDF_TransparenzStroke(PageItem *currItem); + bool PDF_Annotation(PageItem *ite, uint PNr); + void PDF_Form(const QString& im); + void PDF_xForm(uint objNr, double w, double h, QString im); + bool PDF_Image(PageItem* c, const QString& fn, double sx, double sy, double x, double y, bool fromAN = false, const QString& Profil = "", bool Embedded = false, eRenderIntent Intent = Intent_Relative_Colorimetric, QString* output = NULL); + bool PDF_EmbeddedPDF(PageItem* c, const QString& fn, double sx, double sy, double x, double y, bool fromAN, const QString& Profil, bool Embedded, int Intent, ShIm& imgInfo, QString* output = NULL); +#if HAVE_PODOFO + void copyPoDoFoObject(const PoDoFo::PdfObject* obj, uint scObjID, QMap<PoDoFo::PdfReference, uint>& importedObjects); + void copyPoDoFoDirect(const PoDoFo::PdfVariant* obj, QList<PoDoFo::PdfReference>& referencedObjects, QMap<PoDoFo::PdfReference, uint>& importedObjects); +#endif + + int bytesWritten() { return Spool.pos(); } + + + QString Content; + QString ErrorMessage; + ScribusDoc & doc; + const Page * ActPageP; + const PDFOptions & Options; + BookMView* Bvie; + QFile Spool; + int Dokument; + struct Dest + { + QString Name; + int Seite; + QString Act; + }; + struct Cata + { + int Outlines; + int PageTree; + int Dest; + } + Catalog; + struct PagT + { + QMap<int, int> Kids; + int Count; + } + PageTree; + struct PagL + { + int ObjNum; + int Thumb; + QMap<QString,int> XObjects; + QMap<QString,int> ImgObjects; + QMap<QString,int> FObjects; + QList<int> AObjects; + QList<int> FormObjects; + } + Seite; + struct OutL + { + int First; + int Last; + int Count; + } + Outlines; + struct Bead + { + int Parent; + int Next; + int Prev; + int Page; + QRect Recht; + }; + struct ICCD + { + int ResNum; + int components; + QString ResName; + QString ICCArray; + }; + struct OCGInfo + { + int ObjNum; + bool visible; + QString Name; + }; + struct SpotC + { + int ResNum; + QString ResName; + }; + struct gData + { + int ResNumG; + int ResNumX; + QString ResNamG; + QString ResNamX; + QString data; + }; + QMap<QString,ShIm> SharedImages; + QList<uint> XRef; + QList<Dest> NamedDest; + QList<int> Threads; + QList<Bead> Beads; + QList<int> CalcFields; + QMap<QString,int> Patterns; + QMap<QString,int> Shadings; + QMap<QString,int> Transpar; + QMap<QString,ICCD> ICCProfiles; + QHash<QString, OCGInfo> OCGEntries; + QTextCodec* ucs2Codec; + int ObjCounter; + QString ResNam; + int ResCount; + QString NDnam; + QString Datum; + int NDnum; + QMap<QString, QString> UsedFontsP; + QMap<QString, QString> UsedFontsF; + QByteArray KeyGen; + QByteArray OwnerKey; + QByteArray UserKey; + QByteArray FileID; + QByteArray EncryKey; + int Encrypt; + int KeyLen; + QString HTName; + bool BookMinUse; + ColorList colorsToUse; + QMap<QString, SpotC> spotMap; + QMap<QString, SpotC> spotMapReg; + QString spotNam; + int spotCount; + int inPattern; + QDataStream outStream; + QMap<QString, QString> StdFonts; + MultiProgressDialog* progressDialog; + bool abortExport; + bool usingGUI; + double bleedDisplacementX; + double bleedDisplacementY; + QMap<QString, QMap<uint, uint> > Type3Fonts; + +protected slots: + void cancelRequested(); +}; + +#endif + + |
