void pdf_write_destination(PDF *p, pdf_dest *dest) { if (dest->type == nameddest) { pdf_put_hypertext(p, dest->name); pdc_puts(p->out, "\n"); return; } pdc_begin_array(p->out); if (dest->remote_page) { pdc_printf(p->out, "%d", dest->remote_page - 1); /* zero-based */ } else { if (dest->page == PDC_BAD_ID) dest->page = pdf_get_page_id(p, dest->pgnum); pdc_objref_c(p->out, dest->page); } switch (dest->type) { case fixed: pdc_puts(p->out, "/XYZ "); if (dest->left != -1) pdc_printf(p->out, "%f ", dest->left); else pdc_puts(p->out, "null "); if (dest->top != -1) pdc_printf(p->out, "%f ", dest->top); else pdc_puts(p->out, "null "); if (dest->zoom != -1) pdc_printf(p->out, "%f", dest->zoom); else pdc_puts(p->out, "null"); break; case fitwindow: pdc_puts(p->out, "/Fit"); break; case fitwidth: pdc_printf(p->out, "/FitH %f", dest->top); break; case fitheight: pdc_printf(p->out, "/FitV %f", dest->left); break; case fitrect: pdc_printf(p->out, "/FitR %f %f %f %f", dest->left, dest->bottom, dest->right, dest->top); break; case fitvisible: pdc_puts(p->out, "/FitB"); break; case fitvisiblewidth: pdc_printf(p->out, "/FitBH %f", dest->top); break; case fitvisibleheight: pdc_printf(p->out, "/FitBV %f", dest->left); break; default: break; } pdc_end_array(p->out); }
pdc_bool pdf_write_action_entries(PDF *p, pdf_event_object eventobj, pdc_id *act_idlist) { const pdc_keyconn *keyconntable = NULL; const char *keyword; pdc_id act_id = PDC_BAD_ID; pdc_bool adict = pdc_false; pdc_bool aadict = pdc_false; int code; switch(eventobj) { case event_annotation: keyconntable = pdf_annotevent_pdfkeylist; break; case event_bookmark: keyconntable = pdf_bookmarkevent_pdfkeylist; break; case event_document: keyconntable = pdf_documentevent_pdfkeylist; break; case event_page: keyconntable = pdf_pageevent_pdfkeylist; break; default: break; } for (code = 0; ; code++) { keyword = pdc_get_keyword(code, keyconntable); if (keyword) { act_id = act_idlist[code]; if (act_id != PDC_BAD_ID) { if (code && !aadict) { pdc_puts(p->out, "/AA"); pdc_begin_dict(p->out); /* AA dict */ aadict = pdc_true; } else if (!code) adict = pdc_true; pdc_printf(p->out, "/%s", keyword); pdc_objref_c(p->out, act_id); } } else break; } if (aadict) pdc_end_dict(p->out); /* AA dict */ else if (adict) pdc_puts(p->out, "\n"); return adict; }
void pdf_write_colorspace(PDF *p, int slot, pdc_bool direct) { static const char *fn = "pdf_write_colorspace"; pdf_colorspace *cs; int base; if (slot < 0 || slot >= p->colorspaces_number) pdc_error(p->pdc, PDF_E_INT_BADCS, fn, pdc_errprintf(p->pdc, "%d", slot), "(unknown)", 0); cs = &p->colorspaces[slot]; /* we always write simple colorspaces directly */ if (PDF_SIMPLE_COLORSPACE(cs)) direct = pdc_true; if (!direct) { pdc_objref_c(p->out, cs->obj_id); return; } switch (cs->type) { case DeviceGray: pdc_printf(p->out, "/DeviceGray"); break; case DeviceRGB: pdc_printf(p->out, "/DeviceRGB"); break; case DeviceCMYK: pdc_printf(p->out, "/DeviceCMYK"); break; case Indexed: base = cs->val.indexed.base; pdc_begin_array(p->out); pdc_puts(p->out, "/Indexed"); pdf_write_colorspace(p, base, pdc_false); pdc_printf(p->out, " %d", cs->val.indexed.palette_size - 1); pdc_objref_c(p->out, cs->val.indexed.colormap_id); pdc_end_array_c(p->out); break; case PatternCS: pdc_begin_array(p->out); pdc_printf(p->out, "/Pattern"); pdf_write_colorspace(p, cs->val.pattern.base, pdc_false); pdc_end_array(p->out); break; default: pdc_error(p->pdc, PDF_E_INT_BADCS, fn, pdc_errprintf(p->pdc, "%d", slot), pdc_errprintf(p->pdc, "%d", cs->type), 0); } } /* pdf_write_colorspace */