X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fxo-print.h;h=498be84f0053b5d0a45404ec2effcf75af8fc5d2;hb=69037d6ddbe7e90d13d8a7a088d8c209a926190e;hp=96ab4be61fafdb9c2b60d1077e444eb0ccf19b3e;hpb=6882d6c15461712e95f3046c078e66737f23941c;p=xournal.git diff --git a/src/xo-print.h b/src/xo-print.h index 96ab4be..498be84 100644 --- a/src/xo-print.h +++ b/src/xo-print.h @@ -1 +1,96 @@ -void print_job_render(GnomePrintJob *gpj, int fromPage, int toPage); +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This software 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 + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +typedef struct XrefTable { + int *data; + int last; + int n_alloc; +} XrefTable; + +typedef struct PdfPageDesc { + struct PdfObj *resources, *mediabox, *contents; + int rotate; +} PdfPageDesc; + +typedef struct PdfInfo { + int startxref; + struct PdfObj *trailerdict; + int npages; + struct PdfPageDesc *pages; +} PdfInfo; + +typedef struct PdfObj { + int type; + int intval; + double realval; + char *str; + int len, num; + struct PdfObj **elts; + char **names; +} PdfObj; + +typedef struct PdfFont { + int n_obj; + gboolean used_in_this_page; + char *filename; + int font_id; + gboolean is_truetype; + int glyph_page; + int glyphmap[256]; + int advance[256]; + char *glyphpsnames[256]; + int num_glyphs_used; + // fields from the FT_Face + gdouble ft2ps; + int nglyphs; + int ascender, descender, xmin, xmax, ymin, ymax; // in PDF font units + gchar *fontname; + int flags; +} PdfFont; + +typedef struct PdfImage { + int n_obj; + gboolean has_alpha; + int n_obj_smask; /* only if has_alpha */ + GdkPixbuf *pixbuf; + gboolean used_in_this_page; +} PdfImage; + + +#define PDFTYPE_CST 0 // intval: true=1, false=0, null=-1 +#define PDFTYPE_INT 1 // intval +#define PDFTYPE_REAL 2 // realval +#define PDFTYPE_STRING 3 // str, len +#define PDFTYPE_NAME 4 // str +#define PDFTYPE_ARRAY 5 // num, elts +#define PDFTYPE_DICT 6 // num, elts, names +#define PDFTYPE_STREAM 7 // dict: num, elts, names; data: str, len +#define PDFTYPE_REF 8 // intval, num + +struct PdfObj *parse_pdf_object(char **ptr, char *eof); +void free_pdfobj(struct PdfObj *obj); +struct PdfObj *dup_pdfobj(struct PdfObj *obj); +struct PdfObj *get_pdfobj(GString *pdfbuf, struct XrefTable *xref, struct PdfObj *obj); +void make_xref(struct XrefTable *xref, int nobj, int offset); + +gboolean pdf_parse_info(GString *pdfbuf, struct PdfInfo *pdfinfo, struct XrefTable *xref); + +// main printing functions + +gboolean print_to_pdf(char *filename); + +#if GTK_CHECK_VERSION(2, 10, 0) +void print_job_render_page(GtkPrintOperation *print, GtkPrintContext *context, gint pageno, gpointer user_data); +#endif