00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 #ifndef _DJVU_TO_PS_H_
00058 #define _DJVU_TO_PS_H_
00059 #ifdef HAVE_CONFIG_H
00060 #include "config.h"
00061 #endif
00062 #if NEED_GNUG_PRAGMAS
00063 # pragma interface
00064 #endif
00065
00078
00079 #include "DjVuGlobal.h"
00080 #include "GRect.h"
00081 #include "DjVuDocument.h"
00082 #include "DjVuText.h"
00083
00084 #ifdef HAVE_NAMESPACES
00085 namespace DJVU {
00086 # ifdef NOT_DEFINED // Just to fool emacs c++ mode
00087 }
00088 #endif
00089 #endif
00090
00095 class DjVuToPS
00096 {
00097 public:
00098 class DecodePort;
00099
00137 class Options
00138 {
00139 public:
00141 enum Mode { COLOR, FORE, BACK, BW };
00143 enum Format { PS, EPS };
00145 enum Orientation { PORTRAIT, LANDSCAPE, AUTO };
00147 enum BookletMode { OFF, RECTO, VERSO, RECTOVERSO };
00148 private:
00149 Format format;
00150 int level;
00151 Orientation orientation;
00152 Mode mode;
00153 int zoom;
00154 bool color;
00155 bool calibrate;
00156 bool text;
00157 double gamma;
00158 int copies;
00159 bool frame;
00160 bool cropmarks;
00161 BookletMode bookletmode;
00162 int bookletmax;
00163 int bookletalign;
00164 int bookletfold;
00165 int bookletxfold;
00166 public:
00168 void set_format(Format format);
00170 void set_level(int level);
00172 void set_orientation(Orientation orientation);
00174 void set_mode(Mode mode);
00176 void set_zoom(int zoom);
00178 void set_color(bool color);
00180 void set_gamma(double gamma);
00182 void set_sRGB(bool calibrate);
00184 void set_copies(int copies);
00186 void set_frame(bool on);
00188 void set_cropmarks(bool on);
00190 void set_text(bool on);
00192 void set_bookletmode(BookletMode m);
00194 void set_bookletmax(int m);
00197 void set_bookletalign(int m);
00201 void set_bookletfold(int fold, int xfold=0);
00202
00204 Format get_format(void) const {
00205 return format; }
00207 int get_level(void) const {
00208 return level; }
00210 Orientation get_orientation(void) const {
00211 return orientation; }
00214 Mode get_mode(void) const {
00215 return mode; }
00217 int get_zoom(void) const {
00218 return zoom; }
00220 bool get_color(void) const {
00221 return color; }
00223 bool get_sRGB(void) const {
00224 return calibrate; }
00226 double get_gamma(void) const {
00227 return ((calibrate) ? ((double)2.2) : gamma); }
00230 int get_copies(void) const {
00231 return copies; }
00233 bool get_frame(void) const {
00234 return frame; }
00236 bool get_cropmarks(void) const {
00237 return cropmarks; }
00239 bool get_text(void) const {
00240 return text; }
00242 BookletMode get_bookletmode(void) const {
00243 return bookletmode; }
00245 int get_bookletmax(void) {
00246 return bookletmax; }
00248 int get_bookletalign(void) {
00249 return bookletalign; }
00251 int get_bookletfold(int n=0) {
00252 return bookletfold + (n*bookletxfold+500)/1000; }
00253
00254 Options(void);
00255 };
00256
00259 enum Stage { DECODING, PRINTING };
00260
00261 private:
00262 void (*refresh_cb)(void*);
00263 void *refresh_cl_data;
00264 void (*prn_progress_cb)(double, void*);
00265 void *prn_progress_cl_data;
00266 void (*dec_progress_cb)(double, void*);
00267 void *dec_progress_cl_data;
00268 void (*info_cb)(int,int,int,Stage,void*);
00269 void *info_cl_data;
00270 unsigned char ramp[256];
00271 GP<DecodePort> port;
00272 protected:
00273 void store_doc_prolog(ByteStream&,int,int,GRect*);
00274 void store_doc_setup(ByteStream&);
00275 void store_doc_trailer(ByteStream&);
00276 void store_page_setup(ByteStream&,int,const GRect&,int align=0);
00277 void store_page_trailer(ByteStream&);
00278 void make_gamma_ramp(GP<DjVuImage>);
00279 void print_image_lev1(ByteStream&,GP<DjVuImage>,const GRect&);
00280 void print_image_lev2(ByteStream&,GP<DjVuImage>,const GRect&);
00281 void print_bg(ByteStream&,GP<DjVuImage>,const GRect&);
00282 void print_fg_3layer(ByteStream&,GP<DjVuImage>,const GRect&,unsigned char*);
00283 void print_fg_2layer(ByteStream&,GP<DjVuImage>,const GRect&,unsigned char*);
00284 void print_fg(ByteStream&,GP<DjVuImage>,const GRect&);
00285 void print_image(ByteStream&,GP<DjVuImage>,const GRect&,GP<DjVuTXT>);
00286 void parse_range(GP<DjVuDocument>,GUTF8String,GList<int>&);
00287 GP<DjVuImage> decode_page(GP<DjVuDocument>,int,int,int);
00288 void process_single_page(ByteStream&,GP<DjVuDocument>,int,int,int,int);
00289 void process_double_page(ByteStream&,GP<DjVuDocument>,void*,int,int);
00290
00291 public:
00294 Options options;
00295
00304 void set_refresh_cb(void (*refresh_cb)(void*), void *refresh_cl_data);
00316 void set_prn_progress_cb(void (*cb)(double, void*), void *data);
00331 void set_dec_progress_cb(void (*cb)(double, void*), void *data);
00350 void set_info_cb(void (*cb)(int,int,int,Stage,void*), void *data);
00352
00381 void print(ByteStream&, GP<DjVuImage> dimg,
00382 const GRect &prn_rect, const GRect &img_rect,
00383 int override_dpi=-1 );
00384
00403 void print(ByteStream&, GP<DjVuDocument> doc, GUTF8String page_range);
00404 void print(ByteStream&, GP<DjVuDocument> doc);
00405
00406
00408 DjVuToPS(void);
00409 };
00410
00411
00412
00413
00414
00415
00417
00418
00419 #ifdef HAVE_NAMESPACES
00420 }
00421 # ifndef NOT_USING_DJVU_NAMESPACE
00422 using namespace DJVU;
00423 # endif
00424 #endif
00425 #endif