1 #ifndef EXTENSION_INTERNAL_PDF_H_SEEN\r
2 #define EXTENSION_INTERNAL_PDF_H_SEEN\r
3 \r
4 /*\r
5 * Authors:\r
6 * Lauris Kaplinski <lauris@kaplinski.com>\r
7 * Ted Gould <ted@gould.cx>\r
8 * Ulf Erikson <ulferikson@users.sf.net>\r
9 *\r
10 * Lauris' original code is in the public domain.\r
11 * Ted's changes are licensed under the GNU GPL.\r
12 */\r
13 \r
14 #include <config.h>\r
15 #include "extension/extension.h"\r
16 #include "extension/implementation/implementation.h"\r
17 #include <set>\r
18 #include <string>\r
19 \r
20 #include "libnr/nr-path.h"\r
21 \r
22 #include "svg/stringstream.h"\r
23 \r
24 class PdfFile;\r
25 class PdfObject;\r
26 \r
27 namespace Inkscape {\r
28 namespace Extension {\r
29 namespace Internal {\r
30 \r
31 class PrintPDF : public Inkscape::Extension::Implementation::Implementation {\r
32 float _width;\r
33 float _height;\r
34 FILE *_stream;\r
35 PdfFile *pdf_file;\r
36 PdfObject *doc_info;\r
37 PdfObject *page_stream;\r
38 unsigned short _dpi;\r
39 bool _bitmap;\r
40 std::set<std::string> _latin1_encoded_fonts;\r
41 bool _newlatin1font_proc_defined;\r
42 \r
43 void print_bpath(SVGOStringStream &os, NArtBpath const *bp);\r
44 \r
45 void print_fill_style(SVGOStringStream &os, SPStyle const *style, NRRect const *pbox);\r
46 void print_fill_alpha(SVGOStringStream &os, SPStyle const *style, NRRect const *pbox);\r
47 void print_stroke_style(SVGOStringStream &os, SPStyle const *style);\r
48 \r
49 char const *PSFontName(SPStyle const *style);\r
50 \r
51 unsigned int print_image(FILE *ofp, guchar *px, unsigned int width, unsigned int height, unsigned int rs,\r
52 NRMatrix const *transform);\r
53 void compress_packbits(int nin, guchar *src, int *nout, guchar *dst);\r
54 \r
55 /* ASCII 85 variables */\r
56 guint32 ascii85_buf;\r
57 int ascii85_len;\r
58 int ascii85_linewidth;\r
59 /* ASCII 85 Functions */\r
60 void ascii85_init(void);\r
61 void ascii85_flush(SVGOStringStream &os);\r
62 inline void ascii85_out(guchar byte, SVGOStringStream &os);\r
63 void ascii85_nout(int n, guchar *uptr, SVGOStringStream &os);\r
64 void ascii85_done(SVGOStringStream &os);\r
65 \r
66 \r
67 public:\r
68 PrintPDF(void);\r
69 virtual ~PrintPDF(void);\r
70 \r
71 /* Print functions */\r
72 virtual unsigned int setup(Inkscape::Extension::Print *module);\r
73 /*\r
74 virtual unsigned int set_preview(Inkscape::Extension::Print *module);\r
75 */\r
76 \r
77 virtual unsigned int begin(Inkscape::Extension::Print *module, SPDocument *doc);\r
78 virtual unsigned int finish(Inkscape::Extension::Print *module);\r
79 \r
80 /* Rendering methods */\r
81 virtual unsigned int bind(Inkscape::Extension::Print *module, NRMatrix const *transform, float opacity);\r
82 virtual unsigned int release(Inkscape::Extension::Print *module);\r
83 virtual unsigned int comment(Inkscape::Extension::Print *module, char const *comment);\r
84 virtual unsigned int fill(Inkscape::Extension::Print *module, NRBPath const *bpath, NRMatrix const *ctm, SPStyle const *style,\r
85 NRRect const *pbox, NRRect const *dbox, NRRect const *bbox);\r
86 virtual unsigned int stroke(Inkscape::Extension::Print *module, NRBPath const *bpath, NRMatrix const *transform, SPStyle const *style,\r
87 NRRect const *pbox, NRRect const *dbox, NRRect const *bbox);\r
88 virtual unsigned int image(Inkscape::Extension::Print *module, unsigned char *px, unsigned int w, unsigned int h, unsigned int rs,\r
89 NRMatrix const *transform, SPStyle const *style);\r
90 virtual unsigned int text(Inkscape::Extension::Print *module, char const *text,\r
91 NR::Point p, SPStyle const *style);\r
92 \r
93 bool textToPath(Inkscape::Extension::Print *ext);\r
94 static void init(void);\r
95 };\r
96 \r
97 } /* namespace Internal */\r
98 } /* namespace Extension */\r
99 } /* namespace Inkscape */\r
100 \r
101 \r
102 #endif /* !EXTENSION_INTERNAL_PDF_H_SEEN */\r
103 \r
104 /*\r
105 Local Variables:\r
106 mode:c++\r
107 c-file-style:"stroustrup"\r
108 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\r
109 indent-tabs-mode:nil\r
110 fill-column:99\r
111 End:\r
112 */\r
113 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :\r