#define B2PDF_C 1 #include "bmepsi.h" #include "bmeps.h" $(trace-include) static char *kw[] = { /* 0 */ "\r\n", /* 1 */ " ", /* 2 */ "%PDF-", /* 3 */ "1.2", /* 4 */ "1.3", /* 5 */ "1.4", /* 6 */ "<<", /* 7 */ ">>", /* 8 */ "obj", /* 9 */ "endobj", /* 10 */ "[", /* 11 */ "]", /* 12 */ "xref", /* 13 */ "trailer", /* 14 */ "startxref", /* 15 */ "%%EOF", /* 16 */ "0000000000 65535 f", /* 17 */ "%010lu 00000 n", /* 18 */ "/Size", /* 19 */ "/Info 1 0 R /Root 2 0 R", /* 20 */ "/Producer (bmeps)", /* 21 */ "/Type /Catalog", /* 22 */ "/Pages", /* 23 */ "R", /* 24 */ "/Type /Pages", /* 25 */ "/Count", /* 26 */ "/Kids", /* 27 */ "/Type /Page", /* 28 */ "/MediaBox", /* 29 */ "/Parent", /* 30 */ "/Resources", /* 31 */ "/ProcSet", /* 32 */ "/XObject", /* 33 */ "/PDF", /* 34 */ "/ImageC", /* 35 */ "/ImageB", /* 36 */ "/Contents", /* 37 */ "/X", /* 38 */ "/Length", /* 39 */ "stream", /* 40 */ "endstream", /* 41 */ "/ASCIIHexDecode", /* 42 */ "/ASCII85Decode", /* 43 */ "/LZWDecode", /* reserved for future use */ /* 44 */ "/FlateDecode", /* 45 */ "/RunLengthDecode", /* 46 */ "/DCTDecode", /* 47 */ "/Type /XObject", /* 48 */ "/Subtype /Image", /* 49 */ "/Width", /* 50 */ "/Height", /* 51 */ "/ColorSpace", /* 52 */ "/DeviceRGB", /* 53 */ "/DeviceGray", /* 54 */ "/DeviceCMYK", /* 55 */ "/BitsPerComponent", /* 56 */ "/Length", /* 57 */ "/Filter", /* 58 */ "/Interpolate", /* 59 */ "true", /* 60 */ "false", /* 61 */ "/SMask", /* 62 */ "/Mask", /* 63 */ "/OpenAction", /* 64 */ "/Fit", /* 65 */ "/FitH", /* 66 */ "/FitV 0", /* 67 */ "q", /* 68 */ "Q", /* 69 */ "g", /* gray for fill operations */ /* 70 */ "rg", /* set rgb for fill operations */ /* 71 */ "m", /* start path and moveto */ /* 72 */ "l", /* lineto */ /* 73 */ "h", /* closepath */ /* 74 */ "f", /* fill */ /* 75 */ "re", /* rectangle */ /* 76 */ "/Type /Outlines", /* 77 */ "/First", /* 78 */ "/Last", /* 79 */ "/Title", /* 80 */ "/Prev", /* 81 */ "/Next", /* 82 */ "/Dest", /* 83 */ "(", /* 84 */ ")", /* 85 */ "/Outlines", /* 86 */ "/Decode [1 0 1 0 1 0 1 0]", NULL }; static size_t sz_kw = sizeof(kw)/sizeof(PCHAR); #define pdf_open_dictionary(bj) kw_out(bj, 6) #define pdf_close_dictionary(bj) kw_out(bj, 7) static void kw_out DK_P2(BJ *,bj, size_t,i) { if(i < sz_kw) { if(bj) { if(bj->os) { dkstream_puts(bj->os, kw[i]); } } } } static void pdf_write_reference DK_P2(BJ *,bj, unsigned long,n) { dkstream_puts_ul(bj->os, n); kw_out(bj, 1); dkstream_puts_ul(bj->os, 0UL); kw_out(bj, 1); kw_out(bj, 23); } static int pdf_begin_object DK_P2(BJ *,bj, unsigned long,objno) { int back = 0; PDFOBJPOS *pop; pop = dk_new(PDFOBJPOS,1); if(pop) { pop->objno = objno; pop->pos = dkstream_get_bytes_written(bj->os); if(dksto_add(bj->pdfobjs, (void *)pop)) { dkstream_puts_ul(bj->os, objno); kw_out(bj, 1); dkstream_puts_ul(bj->os, 0UL); kw_out(bj, 1); kw_out(bj, 8); kw_out(bj, 0); back = 1; } else { bmeps_tool_error_memory(bj); bj->exval = 1; } } else { bmeps_tool_error_memory(bj); bj->exval = 1; } return back; } static void pdf_end_object DK_P1(BJ *,bj) { kw_out(bj, 9); kw_out(bj, 0); } static int compare_obj_pos DK_P3(void *,l, void *,r, int,cr) { int back = 0; PDFOBJPOS *ptrl, *ptrr; unsigned long *ulptr; if(l) { if(r) { ptrl = (PDFOBJPOS *)l; ptrr = (PDFOBJPOS *)r; ulptr = (unsigned long *)r; switch(cr) { case 1: { if(ptrl->objno > *ulptr) back = 1; else { if(ptrl->objno < *ulptr) back = -1; } } break; default: { if(ptrl->objno > ptrr->objno) back = 1; else { if(ptrl->objno < ptrr->objno) back = -1; } } break; } } else back = 1; } else { if(r) back = -1; } return back; } static void pdf_file_start DK_P2(BJ *,bj, int,how) { long i = 0; dkbif_set_frame(bj->bif, bj->frame_s); bmeps_tool_calculate_areas(bj); kw_out(bj, 2); switch((bj->bo)->l) { case BMEPS_PDF_LEVEL_12: { kw_out(bj, 3); } break; case BMEPS_PDF_LEVEL_13: { kw_out(bj, 4); } break; default: { kw_out(bj, 5); } break; } kw_out(bj, 0); i += pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 20); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); i += pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; bj->psp = bj->nexto; pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 21); kw_out(bj, 0); if(bj->frame_e > bj->frame_s) { /* reserve object numbers for outline */ kw_out(bj, 85); kw_out(bj, 1); bj->olo = bj->nexto; pdf_write_reference(bj, bj->olo); kw_out(bj, 0); bj->psp += (1UL + bj->frame_n); } $? ". pdfopt = %lu", (bj->bo)->pdfopt kw_out(bj, 22); kw_out(bj, 1); dkstream_puts_ul(bj->os, bj->psp); kw_out(bj, 1); dkstream_puts_ul(bj->os, 0UL); kw_out(bj, 1); kw_out(bj, 23); kw_out(bj, 0); if((bj->bo)->pdfopt & BMEPS_PDFOPT_FIT_MASK) { kw_out(bj, 63); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 1); pdf_write_reference(bj, (bj->psp + 1UL)); kw_out(bj, 1); switch((int)((bj->bo)->pdfopt & BMEPS_PDFOPT_FIT_MASK)) { case (int)BMEPS_PDFOPT_FIT_WIDTH: { kw_out(bj, 65); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.y1); } break; case (int)BMEPS_PDFOPT_FIT_HEIGHT: { kw_out(bj, 66); } break; case (int)BMEPS_PDFOPT_FIT_PAGE: { kw_out(bj, 64); } break; } kw_out(bj, 1); kw_out(bj, 11); kw_out(bj, 0); } pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); if(bj->frame_e > bj->frame_s) { /* create outline objects */ pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 76); kw_out(bj, 0); kw_out(bj, 77); kw_out(bj, 1); pdf_write_reference(bj, bj->nexto); kw_out(bj, 0); kw_out(bj, 78); kw_out(bj, 1); pdf_write_reference(bj, (bj->nexto + bj->frame_n - 1UL)); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); for(i = 0UL; i < bj->frame_n; i++) { dkbif_set_frame(bj->bif, (bj->frame_s + i)); bmeps_tool_calculate_areas(bj); pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 79); kw_out(bj, 1); kw_out(bj, 83); dkstream_puts_ul(bj->os, i+1UL); kw_out(bj, 84); kw_out(bj, 0); kw_out(bj, 29); kw_out(bj, 1); pdf_write_reference(bj, bj->olo); kw_out(bj, 0); if(i != 0UL) { kw_out(bj, 80); kw_out(bj, 1); pdf_write_reference(bj, (bj->nexto - 2UL)); kw_out(bj, 0); } if(i != (bj->frame_n - 1L)) { kw_out(bj, 81); kw_out(bj, 1); pdf_write_reference(bj, bj->nexto); kw_out(bj, 0); } kw_out(bj, 82); kw_out(bj, 1); kw_out(bj, 10); pdf_write_reference(bj, (bj->psp + 1UL + i)); kw_out(bj, 65); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.y1); kw_out(bj, 11); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); } /* set object number to start pages */ bj->nexto = bj->psp; } i += pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 24); kw_out(bj, 0); kw_out(bj, 25); kw_out(bj, 1); dkstream_puts_ul(bj->os, bj->frame_n); kw_out(bj, 0); kw_out(bj, 26); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 0); for(i = 0; i < bj->frame_n; i++) { dkstream_puts_ul(bj->os, (bj->nexto + i)); kw_out(bj, 1); dkstream_puts_ul(bj->os, 0UL); kw_out(bj, 1); kw_out(bj, 23); kw_out(bj, 0); } kw_out(bj, 11); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); } static void transfer_entire_file DK_P3(BJ *,bj, dk_stream_t *,os, FILE *,f) { char buffer[512]; size_t bs, bu, br; int cc = 0, write_error = 0; $? "+ transfer_file_to_stream" bs = sizeof(buffer); cc = 1; while(cc) { br = fread(buffer,1,sizeof(buffer),f); if(br > 0) { bu = dkstream_write(os, buffer, br); if(bu < br) { cc = 0; write_error = 1; } } else { cc = 0; } } if(write_error) { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 53); bj->exval = 1; } $? "- transfer_file_to_stream" } static void transfer_file_to_stream DK_P3(dk_stream_t *,os, FILE *,f, unsigned long,fs) { char buffer[512]; size_t bs, bu, br; unsigned long bytes_to_handle; int cc; $? "+ transfer_file_to_stream" bs = sizeof(buffer); cc = 1; bytes_to_handle = fs; while(cc) { if(bytes_to_handle > 0UL) { if(bytes_to_handle >= (unsigned long)bs) { bu = bs; } else { bu = (size_t)bytes_to_handle; } br = fread(buffer, 1, bu, f); if(br > 0) { dkstream_write(os, buffer, br); bytes_to_handle -= (unsigned long)br; } else { cc = 0; } } else { cc = 0; } } $? "- transfer_file_to_stream" } static void pdf_file_objects_normally DK_P1(BJ *,bj) { unsigned char use_mask_or_alpha; /* flag to indicate mask/alpha usage */ unsigned short bpcs; /* bits per component */ unsigned long bpc; /* also bits per component */ unsigned char c; /* one byte of output for 8-bit input */ unsigned long psp; /* pages start position (object number) */ unsigned long csp; /* contents start position (object number) */ unsigned long xsp; /* xobjects start position (object number) */ unsigned long i; /* */ unsigned long w; /* width of output image */ unsigned long h; /* height of output image */ unsigned long origw; /* width of input image */ unsigned long origh; /* height of input image */ unsigned long filesize; /* file size of temporary file */ unsigned long x; /* x position of source pixel */ unsigned long y; /* y position of source pixel */ unsigned long iy; /* y position of destination pixel */ unsigned long j; /* x position of destination pixel */ long fno; /* number of current frame */ dk_stat_t stbuf; /* stat buffer to obtain file info */ int number_of_filters = 0; /* number of filters for encoding */ int ch = 0; /* number of channels in input file */ int dummy = 0; /* dummy variable for fopen failure */ int data_ok = 0; /* indicate output data file ok */ int mask_ok = 0; /* indicate mask data file ok */ dk_stream_t *ofs1 = NULL; /* unfiltered output stream */ dk_stream_t *ofs2 = NULL; /* filter output stream */ dk_bitshift_t *obs = NULL; /* output bit shifter */ FILE *gfile = NULL; /* temporary file */ size_t nf; /* number of next filter cell to set */ $? "+ pdf_file_objects_normally" fno = bj->frame_s; psp = bj->nexto; csp = psp + bj->frame_n; xsp = csp + bj->frame_n; i = 0UL; bj->nexto = xsp + bj->frame_n; while(fno <= bj->frame_e) { $? ". start of loop" use_mask_or_alpha = 0x00; dkmem_cpy(bj->bo2, bj->bo, sizeof(BO)); $? ". dkmem_cpy ok" if(dkbif_set_frame(bj->bif, fno)) { $? ". set frame ok" data_ok = 0; mask_ok = 0; bmeps_tool_calculate_areas(bj); $? ". calculate areas ok" origw = w = dkbif_get_width(bj->bif); origh = h = dkbif_get_height(bj->bif); if((bj->trans).must_rotate) { w = origh; h = origw; } bpcs = dkbif_get_bits_per_component(bj->bif); bpcs = bmeps_tool_pdf_output_bits(bpcs); bpc = (unsigned long)bpcs; switch(dkbif_get_channels(bj->bif)) { case 1: case 2: { (bj->bo2)->opt &= (~(BMEPS_OPT_COLOR_OUTPUT)); } break; } dkbif_set_bits_per_component(bj->bif, bpcs); $? ", set bits per component ok" switch(dkbif_get_channels(bj->bif)) { case 2: case 4: { $? ". alpha" if((bj->bo2)->opt & BMEPS_OPT_TRANSFER_ALPHA) { $? ". transfer alpha" use_mask_or_alpha = 0x01; } else { $? ". no alpha transfer" if((bj->bo2)->opt & BMEPS_OPT_IMAGE_MASK) { $? ". mask creation" dkbif_set_mask_trigger_level(bj->bif, (bj->bo2)->mtl); use_mask_or_alpha = 0x01; } if((bj->bo2)->opt & BMEPS_OPT_ALPHA_MIX) { $? ". mixing" dkbif_set_mixing(bj->bif, (((bj->bo2)->opt & BMEPS_OPT_PREFER_SPEC_BG) ? 2 : 1), (bj->bo2)->dbgr, (bj->bo2)->dbgg, (bj->bo2)->dbgb ); } } } break; default: { $? ". no alpha" (bj->bo2)->opt &= (~(BMEPS_OPT_IMAGE_MASK)); (bj->bo2)->opt &= (~(BMEPS_OPT_ALPHA_MIX)); (bj->bo2)->opt &= (~(BMEPS_OPT_PREFER_SPEC_BG)); (bj->bo2)->opt &= (~(BMEPS_OPT_TRANSFER_ALPHA)); } break; } $? ". channel check ok" /* PAGE OBJECT */ pdf_begin_object(bj, (psp + i)); pdf_open_dictionary(bj); kw_out(bj, 0); /* type */ kw_out(bj, 27); kw_out(bj, 0); /* parent */ kw_out(bj, 29); kw_out(bj, 1); pdf_write_reference(bj, bj->psp); kw_out(bj, 0); /* media box */ kw_out(bj, 28); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.x0); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.y0); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.x1); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.y1); kw_out(bj, 1); kw_out(bj, 11); kw_out(bj, 0); kw_out(bj, 30); kw_out(bj, 1); pdf_open_dictionary(bj); kw_out(bj, 0); /* procset */ kw_out(bj, 31); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 1); kw_out(bj, 33); kw_out(bj, 1); if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) { kw_out(bj, 34); } else { kw_out(bj, 35); } kw_out(bj, 1); kw_out(bj, 11); kw_out(bj, 0); /* xobject */ kw_out(bj, 32); kw_out(bj, 1); pdf_write_reference(bj, (xsp + i)); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); /* contents */ kw_out(bj, 36); kw_out(bj, 1); pdf_write_reference(bj, (csp + i)); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); /* GRAPHICS INSTRUCTIONS OBJECT */ pdf_begin_object(bj, (csp + i)); gfile = dksf_fopen(bj->tmp2, "wb"); if(gfile) { fprintf(gfile, "q%s", kw[0]); switch(bmeps_tool_how_to_handle_bb(bj)) { case 2: { fprintf( gfile, "1 0 0 1 %lg %lg cm%s", (bj->trans).iu.x0, (bj->trans).iu.y0, kw[0] ); fprintf( gfile, "%lg 0 0 %lg 0 0 cm%s", (bj->trans).sfx, (bj->trans).sfy, kw[0] ); fprintf(gfile, "%lu 0 0 %lu 0 0 cm%s", w, h, kw[0]); } break; case 1: { /* use resolution/paper size */ fprintf( gfile, "1 0 0 1 %lg %lg cm%s", (bj->trans).iu.x0, (bj->trans).iu.y0, kw[0] ); fprintf( gfile, "%lg 0 0 %lg 0 0 cm%s", (bj->trans).sfx, (bj->trans).sfy, kw[0] ); fprintf(gfile, "%lu 0 0 %lu 0 0 cm%s", w, h, kw[0]); } break; default: { /* do not scale */ fprintf(gfile, "%lu 0 0 %lu 0 0 cm%s", w, h, kw[0]); } break; } fprintf(gfile, "/X%lu Do%s", bj->nexto, kw[0]); fprintf(gfile, "Q%s", kw[0]); fflush(gfile); fclose(gfile); gfile = NULL; if(dkstat_get(&stbuf, bj->tmp2)) { filesize = (unsigned long)dkstat_size(&stbuf); gfile = fopen(bj->tmp2, "rb"); if(gfile) { pdf_open_dictionary(bj); kw_out(bj, 1); kw_out(bj, 38); kw_out(bj, 1); dkstream_puts_ul(bj->os, filesize); kw_out(bj, 1); pdf_close_dictionary(bj); kw_out(bj, 0); kw_out(bj, 39); kw_out(bj, 0); transfer_file_to_stream(bj->os, gfile, filesize); kw_out(bj, 40); kw_out(bj, 0); fclose(gfile); gfile = NULL; } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 62, 63, bj->tmp2); bj->exval = 1; } } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 64, 65, bj->tmp2); bj->exval = 1; } dksf_remove_file(bj->tmp2); } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 66, 67, bj->tmp2); bj->exval = 1; } pdf_end_object(bj); /* XOBJECT DICTIONARY */ pdf_begin_object(bj, (xsp + i)); pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 37); dkstream_puts_ul(bj->os, bj->nexto); kw_out(bj, 1); pdf_write_reference(bj, bj->nexto); kw_out(bj, 0); if(use_mask_or_alpha) { kw_out(bj, 37); dkstream_puts_ul(bj->os, (1UL + bj->nexto)); kw_out(bj, 1); pdf_write_reference(bj, (1UL + bj->nexto)); kw_out(bj, 0); } pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); /* XOBJECT OBJECTS, use nexto */ /* image and alpha/mask */ number_of_filters = 2; if((bj->bo2)->enc & (BMEPS_ENCODING_FLATE)) { $? ". have flate or lzw" number_of_filters++; } if((bj->bo2)->enc & BMEPS_ENCODING_RUNLENGTH) { $? ". have run-length" number_of_filters++; } ofs1 = dkstream_openfile(bj->tmp2, "wb", 0, &dummy); if(ofs1) { $? ". ofs1 opened successfully" ofs2 = dkof_open(ofs1, number_of_filters); if(ofs2) { $? ". ofs2 opened successfully" obs = NULL; if(bpc != 8) { $? ". need bitshifter" obs = dkof_bs_open(ofs2); } if((bpc == 8) || (obs)) { $? ". bitshifter ok" data_ok = 1; if(!dkof_set(ofs2, 0, DK_OF_TYPE_BUFFERED)) { data_ok = 0; $? "! failed to set up buffering" } if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) { if(!dkof_set(ofs2, 1, DK_OF_TYPE_ASCII85)) { data_ok = 0; $? "! failed to set up ascii85" } } else { if(!dkof_set(ofs2, 1, DK_OF_TYPE_ASCIIHEX)) { data_ok = 0; $? "! failed to set up asciihex" } } dkof_set_crnl(ofs2, 1); nf = 2; if((bj->bo2)->enc & BMEPS_ENCODING_FLATE) { nf = 3; if(!dkof_set(ofs2, 2, DK_OF_TYPE_FLATE)) { data_ok = 0; $? "! failed to set up flate" } } else { } if((bj->bo2)->enc & BMEPS_ENCODING_RUNLENGTH) { $? ". number_of_filters=%u nf=%u", (unsigned)number_of_filters, (unsigned)nf if(!dkof_set(ofs2, nf, DK_OF_TYPE_PSRL)) { data_ok = 0; $? "! failed to set up run-length" } } if(data_ok) { $? ". setup ok" if(dkof_start_chunk(ofs2)) { $? ". chunk started" ch = dkbif_get_channels(bj->bif); for(iy = 0UL; iy < h; iy++) { for(j = 0UL; j < w; j++) { y = iy; x = j; if((bj->trans).must_rotate) { x = iy; y = w - 1UL - j; } if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) { if((bpc != 8) && (obs)) { dkof_bs_put( obs, dkbif_get_red(bj->bif, x, y), (unsigned short)bpc ); dkof_bs_put( obs, dkbif_get_green(bj->bif, x, y), (unsigned short)bpc ); dkof_bs_put( obs, dkbif_get_blue(bj->bif, x, y), (unsigned short)bpc ); } else { c = (unsigned char)dkbif_get_red(bj->bif, x, y); dkstream_write(ofs2, (char *)(&c), 1); c = (unsigned char)dkbif_get_green(bj->bif, x, y); dkstream_write(ofs2, (char *)(&c), 1); c = (unsigned char)dkbif_get_blue(bj->bif, x, y); dkstream_write(ofs2, (char *)(&c), 1); } } else { if((bpc != 8) && (obs)) { dkof_bs_put( obs, dkbif_get_gray(bj->bif, x, y), (unsigned short)bpc ); } else { c = (unsigned char)dkbif_get_gray(bj->bif, x, y); dkstream_write(ofs2, (char *)(&c), 1); } } } if(obs) { dkof_bs_flush(obs); } } if(!dkof_end_chunk(ofs2)) { data_ok = 0; $? "! failed to finish chunk" } else { $? ". chunk finished" } } else { $? "! failed to start chunk" bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 69); bj->exval = 1; } } else { $? "! setup problem" } } else { bmeps_tool_error_memory(bj); bj->exval = 1; } if(obs) { dkof_bs_close(obs); } obs = NULL; dkof_close(ofs2); ofs2 = NULL; } else { $? "! failed to open osf2" bmeps_tool_error_memory(bj); bj->exval = 1; } dkstream_close(ofs1); ofs1 = NULL; } else { $? "! failed to open osf1" bmeps_tool_error_memory(bj); bj->exval = 1; } if(use_mask_or_alpha) { $? ". create alpha data or mask" ofs1 = dkstream_openfile(bj->tmp3, "wb", 0, &dummy); if(ofs1) { $? ". output stream opened" ofs2 = dkof_open(ofs1, number_of_filters); if(ofs2) { $? ". filter stream opened" mask_ok = 1; if(!dkof_set(ofs2, 0, DK_OF_TYPE_BUFFERED)) { mask_ok = 0; $? "! failed to set up buffering" } if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) { if(!dkof_set(ofs2, 1, DK_OF_TYPE_ASCII85)) { mask_ok = 0; $? "! failed to set up ascii85" } } else { if(!dkof_set(ofs2, 1, DK_OF_TYPE_ASCIIHEX)) { mask_ok = 0; $? "! failed to set up asciihex" } } dkof_set_crnl(ofs2, 1); nf = 2; if((bj->bo2)->enc & BMEPS_ENCODING_FLATE) { nf = 3; if(!dkof_set(ofs2, 2, DK_OF_TYPE_FLATE)) { mask_ok = 0; $? "! failed to set up flate" } } else { } if((bj->bo2)->enc & BMEPS_ENCODING_RUNLENGTH) { $? ". number_of_filters=%u nf=%u", (unsigned)number_of_filters, (unsigned)nf if(!dkof_set(ofs2, nf, DK_OF_TYPE_PSRL)) { mask_ok = 0; $? "! failed to set up run-length" } } if(mask_ok) { if(dkof_start_chunk(ofs2)) { if((bj->bo2)->opt & BMEPS_OPT_TRANSFER_ALPHA) { $? ". alpha" obs = NULL; $? ". bpc = %lu", (unsigned long)bpc if(bpc != 8) { obs = dkof_bs_open(ofs2); } if((bpc == 8) || (obs)) { $? ". bit shifter ok" for(iy = 0UL; iy < h; iy++) { for(j = 0UL; j < w; j++) { unsigned short m; y = iy; x = j; if((bj->trans).must_rotate) { x = iy; y = w - 1UL - j; } m = dkbif_get_alpha(bj->bif, x, y); if(obs) { dkof_bs_put(obs, m, (unsigned short)bpc); } else { c = (unsigned char)m; dkstream_write(ofs2, (char *)(&c), 1); } } if(obs) { dkof_bs_flush(obs); } } if(obs) { dkof_bs_close(obs); obs = NULL; } } else { $? "! failed to open bit shifter" bmeps_tool_error_memory(bj); bj->exval = 1; } } else { $? ". mask" obs = dkof_bs_open(ofs2); if(obs) { $? ". bit shifter ok" for(iy = 0UL; iy < h; iy++) { for(j = 0UL; j < w; j++) { y = iy; x = j; if((bj->trans).must_rotate) { x = iy; y = w - 1UL - j; } dkof_bs_put( obs, (dkbif_get_mask(bj->bif,x,y) ? 1 : 0), (unsigned short)1 ); } if(obs) { dkof_bs_flush(obs); } } dkof_bs_close(obs); obs = NULL; } else { $? "! failed to open bit shifter" bmeps_tool_error_memory(bj); bj->exval = 1; } } if(!dkof_end_chunk(ofs2)) { $? "! failed to finish chunk" mask_ok = 0; bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 69); bj->exval = 1; } } else { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 68); bj->exval = 1; } } else { $? "! failed to set up output encoding" bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 70); bj->exval = 1; } dkof_close(ofs2); ofs2 = NULL; } else { $? "! failed to open filter stream" bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 70); bj->exval = 1; } dkstream_close(ofs1); ofs1 = NULL; } else { $? "! failed to open output stream" bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 66, 67, bj->tmp3); bj->exval = 1; } } $? ". data_ok=%d mask_ok=%d umoa=%d", (int)data_ok, (int)mask_ok, (int)use_mask_or_alpha if(data_ok && ((mask_ok) || (use_mask_or_alpha == 0x00))) { $? ". conditions ok" if(dkstat_get(&stbuf, bj->tmp2)) { $? ". stat ok" filesize = (unsigned long)dkstat_size(&stbuf); pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; gfile= fopen(bj->tmp2, "rb"); if(gfile) { $? ". fopen ok" pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 47); kw_out(bj, 0); kw_out(bj, 48); kw_out(bj, 0); kw_out(bj, 49); kw_out(bj, 1); dkstream_puts_ul(bj->os, w); kw_out(bj, 0); kw_out(bj, 50); kw_out(bj, 1); dkstream_puts_ul(bj->os, h); kw_out(bj, 0); kw_out(bj, 51); kw_out(bj, 1); if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) { kw_out(bj, 52); } else { kw_out(bj, 53); } kw_out(bj, 0); kw_out(bj, 55); kw_out(bj, 1); dkstream_puts_ul(bj->os, bpc); kw_out(bj, 0); if((bj->bo2)->opt & BMEPS_OPT_INTERPOLATE) { kw_out(bj, 58); kw_out(bj, 1); kw_out(bj, 59); kw_out(bj, 0); } if(use_mask_or_alpha) { if((bj->bo2)->opt & BMEPS_OPT_TRANSFER_ALPHA) { kw_out(bj, 61); } else { kw_out(bj, 62); } kw_out(bj, 1); dkstream_puts_ul(bj->os, bj->nexto); kw_out(bj, 1); dkstream_puts_ul(bj->os, 0UL); kw_out(bj, 1); kw_out(bj, 23); kw_out(bj, 0); } kw_out(bj, 56); kw_out(bj, 1); dkstream_puts_ul(bj->os, filesize); kw_out(bj, 0); kw_out(bj, 57); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 1); if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) { kw_out(bj, 42); } else { kw_out(bj, 41); } kw_out(bj, 1); if((bj->bo2)->enc & BMEPS_ENCODING_FLATE) { kw_out(bj, 44); kw_out(bj, 1); } else { } if((bj->bo2)->enc & BMEPS_ENCODING_RUNLENGTH) { kw_out(bj, 45); } kw_out(bj, 1); kw_out(bj, 11); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); kw_out(bj, 39); kw_out(bj, 0); transfer_file_to_stream(bj->os, gfile, filesize); kw_out(bj, 40); kw_out(bj, 0); fclose(gfile); gfile = NULL; } else { $? "! fopen failed" bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 62, 63, bj->tmp2); bj->exval = 1; } pdf_end_object(bj); if(use_mask_or_alpha) { if(dkstat_get(&stbuf, bj->tmp3)) { filesize =(unsigned long)dkstat_size(&stbuf); pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; gfile = fopen(bj->tmp3, "rb"); if(gfile) { pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 47); kw_out(bj, 0); kw_out(bj, 48); kw_out(bj, 0); kw_out(bj, 49); kw_out(bj, 1); dkstream_puts_ul(bj->os, w); kw_out(bj, 0); kw_out(bj, 50); kw_out(bj, 1); dkstream_puts_ul(bj->os, h); kw_out(bj, 0); kw_out(bj, 51); kw_out(bj, 1); kw_out(bj, 53); kw_out(bj, 0); kw_out(bj, 55); kw_out(bj, 1); if((bj->bo2)->opt & BMEPS_OPT_TRANSFER_ALPHA) { dkstream_puts_ul(bj->os, bpc); } else { dkstream_puts_ul(bj->os, 1UL); } kw_out(bj, 0); kw_out(bj, 56); kw_out(bj, 1); dkstream_puts_ul(bj->os, filesize); kw_out(bj, 0); kw_out(bj, 57); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 1); if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) { kw_out(bj, 42); } else { kw_out(bj, 41); } kw_out(bj, 1); if((bj->bo2)->enc & BMEPS_ENCODING_FLATE) { kw_out(bj, 44); kw_out(bj, 1); } else { } if((bj->bo2)->enc & BMEPS_ENCODING_RUNLENGTH) { kw_out(bj, 45); } kw_out(bj, 1); kw_out(bj, 11); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); kw_out(bj, 39); kw_out(bj, 0); transfer_file_to_stream(bj->os, gfile, filesize); kw_out(bj, 40); kw_out(bj, 0); fclose(gfile); gfile = NULL; } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 62, 63, bj->tmp3); bj->exval = 1; } pdf_end_object(bj); } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 64, 65, bj->tmp3); bj->exval = 1; } } } else { $? "! stat failed" bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 64, 65, bj->tmp2); bj->exval = 1; } } else { $? "! conditions wrong" } } else { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 71); bj->exval = 1; } fno++; i++; } $? "- pdf_file_objects_normally" } static void pdf_file_objects_dct DK_P1(BJ *,bj) { #if DK_HAVE_JPEGLIB_H unsigned short bpcs; /* bits per component */ unsigned long bpc; /* also bits per component */ /* unsigned char c; */ /* one byte of output for 8-bit input */ unsigned long psp; /* pages start position (object number) */ unsigned long csp; /* contents start position (object number) */ unsigned long xsp; /* xobjects start position (object number) */ unsigned long i; /* */ unsigned long w; /* width of output image */ unsigned long h; /* height of output image */ unsigned long origw; /* width of input image */ unsigned long origh; /* height of input image */ unsigned long filesize; /* file size of temporary file */ /* unsigned long x; */ /* x position of source pixel */ /* unsigned long y; */ /* y position of source pixel */ /* unsigned long iy; */ /* y position of destination pixel */ /* unsigned long j; */ /* x position of destination pixel */ long fno; /* number of current frame */ dk_stat_t stbuf; /* stat buffer to obtain file info */ int ch = 0; /* number of channels in input file */ int dummy = 0; /* dummy variable for fopen failure */ int data_ok = 0; /* indicate output data file ok */ dk_stream_t *ofs1 = NULL; /* unfiltered output stream */ dk_stream_t *ofs2 = NULL; /* filter output stream */ dk_bitshift_t *obs = NULL; /* output bit shifter */ FILE *gfile = NULL; /* temporary file */ $? "+ pdf_objects_dct" i = 0; bj->frame_n = 1; fno = bj->frame_s; psp = bj->nexto; csp = psp + bj->frame_n; xsp = csp + bj->frame_n; dkmem_cpy(bj->bo2, bj->bo, sizeof(BO)); bmeps_tool_calculate_areas(bj); origw = w = dkbif_get_width(bj->bif); origh = h = dkbif_get_height(bj->bif); if((bj->trans).must_rotate) { w = origh; h = origw; } bpcs = dkbif_get_bits_per_component(bj->bif); bpc = (unsigned long)bpcs; pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; pdf_open_dictionary(bj); kw_out(bj, 0); /* type */ kw_out(bj, 27); kw_out(bj, 0); /* parent */ kw_out(bj, 29); kw_out(bj, 1); pdf_write_reference(bj, bj->psp); kw_out(bj, 0); /* media box */ kw_out(bj, 28); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.x0); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.y0); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.x1); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.y1); kw_out(bj, 1); kw_out(bj, 11); kw_out(bj, 0); /* resources */ kw_out(bj, 30); kw_out(bj, 1); pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 31); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 1); kw_out(bj, 33); kw_out(bj, 1); if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) { kw_out(bj, 34); } else { kw_out(bj, 35); } kw_out(bj, 0); kw_out(bj, 11); kw_out(bj, 0); kw_out(bj, 32); kw_out(bj, 1); pdf_write_reference(bj, (xsp + i)); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); /* contents */ kw_out(bj, 36); kw_out(bj, 1); pdf_write_reference(bj, (csp + i)); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); /* GRAPHICS CONTENTS OBJECT */ pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; gfile = dksf_fopen(bj->tmp2, "w"); if(gfile) { fprintf(gfile, "q%s", kw[0]); switch(bmeps_tool_how_to_handle_bb(bj)) { case 2: { #define DO_DEBUG 0 #if DO_DEBUG if((bj->trans).must_rotate) { fprintf( gfile, "1 0 0 1 %lg %lg cm%s", 0.5*((bj->trans).iu.x0 + (bj->trans).iu.x1), 0.5*((bj->trans).iu.y1 + (bj->trans).iu.y0), kw[0] ); fprintf( gfile, "0 -1 1 0 0 0 cm%s", kw[0] ); fprintf( gfile, "%lg 0 0 %lg 0 0 cm%s", 0.5*(bj->trans).sfy, 0.5*(bj->trans).sfx, kw[0] ); fprintf(gfile, "%lu 0 0 %lu 0 0 cm%s", origw, origh, kw[0]); #else if((bj->trans).must_rotate) { fprintf( gfile, "1 0 0 1 %lg %lg cm%s", (bj->trans).iu.x0, (bj->trans).iu.y1, kw[0] ); fprintf( gfile, "0 -1 1 0 0 0 cm%s", kw[0] ); fprintf( gfile, "%lg 0 0 %lg 0 0 cm%s", (bj->trans).sfy, (bj->trans).sfx, kw[0] ); fprintf(gfile, "%lu 0 0 %lu 0 0 cm%s", origw, origh, kw[0]); #endif } else { fprintf( gfile, "1 0 0 1 %lg %lg cm%s", (bj->trans).iu.x0, (bj->trans).iu.y0, kw[0] ); fprintf( gfile, "%lg 0 0 %lg 0 0 cm%s", (bj->trans).sfx, (bj->trans).sfy, kw[0] ); } } break; case 1: { /* use resolution/paper size */ fprintf( gfile, "1 0 0 1 %lg %lg cm%s", (bj->trans).iu.x0, (bj->trans).iu.y0, kw[0] ); fprintf( gfile, "%lg 0 0 %lg 0 0 cm%s", (bj->trans).sfx, (bj->trans).sfy, kw[0] ); fprintf(gfile, "%lu 0 0 %lu 0 0 cm%s", w, h, kw[0]); } break; default: { /* do not scale */ fprintf(gfile, "%lu 0 0 %lu 0 0 cm%s", w, h, kw[0]); } break; } fprintf(gfile, "/X%lu Do%s", (bj->nexto + 1UL), kw[0]); fprintf(gfile, "Q%s", kw[0]); fflush(gfile); fclose(gfile); gfile = NULL; if(dkstat_get(&stbuf, bj->tmp2)) { filesize = (unsigned long)dkstat_size(&stbuf); gfile = fopen(bj->tmp2, "rb"); if(gfile) { pdf_open_dictionary(bj); kw_out(bj, 1); kw_out(bj, 38); kw_out(bj, 1); dkstream_puts_ul(bj->os, filesize); kw_out(bj, 1); pdf_close_dictionary(bj); kw_out(bj, 0); kw_out(bj, 39); kw_out(bj, 0); transfer_file_to_stream(bj->os, gfile, filesize); kw_out(bj, 40); kw_out(bj, 0); fclose(gfile); gfile = NULL; } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 62, 63, bj->tmp2); bj->exval = 1; } } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 64, 65, bj->tmp2); bj->exval = 1; } dksf_remove_file(bj->tmp2); } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 66, 67, bj->tmp2); bj->exval = 1; } pdf_end_object(bj); /* XOBJECT DICTIONARY */ pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 37); dkstream_puts_ul(bj->os, bj->nexto); kw_out(bj, 1); pdf_write_reference(bj, bj->nexto); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); /* XOBJECT OBJECT */ pdf_begin_object(bj, bj->nexto); bj->nexto += 1UL; data_ok = 0; dummy = 0; ofs1 = dkstream_openfile(bj->tmp2, "wb", 0, &dummy); if(ofs1) { ofs2 = dkof_open(ofs1, 2); if(ofs2) { data_ok = 1; if(!dkof_set(ofs2, 0, DK_OF_TYPE_BUFFERED)) { data_ok = 0; } if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) { if(!dkof_set(ofs2, 1, DK_OF_TYPE_ASCII85)) { data_ok = 0; } } else { if(!dkof_set(ofs2, 1, DK_OF_TYPE_ASCIIHEX)) { data_ok = 0; } } dkof_set_crnl(ofs2, 1); if(data_ok) { if(dkof_start_chunk(ofs2)) { rewind(bj->inf); transfer_entire_file(bj, ofs2, bj->inf); if(!dkof_end_chunk(ofs2)) { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 69); bj->exval = 1; } } else { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 68); bj->exval = 1; } } else { /* previous errors */ } dkof_close(ofs2); ofs2 = 0; } else { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 70); bj->exval = 1; } dkstream_close(ofs1); ofs1 = NULL; } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 66, 67, bj->tmp2); bj->exval = 1; } if(data_ok) { if(dkstat_get(&stbuf, bj->tmp2)) { filesize = (unsigned long)dkstat_size(&stbuf); gfile= fopen(bj->tmp2, "rb"); if(gfile) { pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 47); kw_out(bj, 0); kw_out(bj, 48); kw_out(bj, 0); kw_out(bj, 49); kw_out(bj, 1); dkstream_puts_ul(bj->os, origw); kw_out(bj, 0); kw_out(bj, 50); kw_out(bj, 1); dkstream_puts_ul(bj->os, origh); kw_out(bj, 0); kw_out(bj, 51); kw_out(bj, 1); if(((bj->bif)->d).jpg.jpgana.components > 0x01) { if(((bj->bif)->d).jpg.jpgana.components == 0x03) { kw_out(bj, 52); } else { kw_out(bj, 54); } } else { kw_out(bj, 53); } kw_out(bj, 0); kw_out(bj, 55); kw_out(bj, 1); dkstream_puts_ul(bj->os, bpc); kw_out(bj, 0); if((bj->bo2)->opt & BMEPS_OPT_INTERPOLATE) { if((bj->bo2)->opt & BMEPS_OPT_JPEG_INTERPOLATE) { kw_out(bj, 58); kw_out(bj, 1); kw_out(bj, 59); kw_out(bj, 0); } } kw_out(bj, 56); kw_out(bj, 1); dkstream_puts_ul(bj->os, filesize); kw_out(bj, 0); kw_out(bj, 57); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 1); if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) { kw_out(bj, 42); } else { kw_out(bj, 41); } kw_out(bj, 1); kw_out(bj, 46); kw_out(bj, 1); kw_out(bj, 11); kw_out(bj, 0); if((((bj->bif)->d).jpg.jpgana.components) != 0x01) { if((((bj->bif)->d).jpg.jpgana.components) != 0x03) { if(((bj->bif)->d).jpg.jpgana.adobe_marker_found) { kw_out(bj, 86); kw_out(bj, 0); } } } pdf_close_dictionary(bj); kw_out(bj, 0); kw_out(bj, 39); kw_out(bj, 0); transfer_file_to_stream(bj->os, gfile, filesize); kw_out(bj, 40); kw_out(bj, 0); fclose(gfile); gfile = NULL; } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 62, 63, bj->tmp2); bj->exval = 1; } } } pdf_end_object(bj); $? "- pdf_objects_dct" #endif } #define DKSP(i) dkstream_puts(ofs2, kw[i]) static void pdf_file_objects_draft DK_P1(BJ *,bj) { long fno; /* current frame to process */ unsigned long w, h, origw, origh; /* image dimensions */ unsigned long psp; /* page start position */ unsigned long csp; /* contents start position */ unsigned long i; /* the frame number */ unsigned long filesize; /* length of stream */ FILE *gfile; /* used to read encoded stream */ DI dinner, douter; int dummy, data_ok, number_of_filters; double r = 0.7, g = 0.0, b = 0.0, gray = 0.9, black = 0.0; dk_stream_t *ofs1, *ofs2; dk_stat_t stbuf; $? "+ pdf_file_objects_draft" fno = bj->frame_s; psp = bj->nexto; csp = psp + bj->frame_n; i = 0UL; bj->nexto = csp + bj->frame_n; /* number of objects at end */ while(fno <= bj->frame_e) { $? ". start of loop" w = h = origw = origh = 0UL; data_ok = 0; ofs1 = NULL; ofs2 = NULL; dkmem_cpy(bj->bo2, bj->bo, sizeof(BO)); if(dkbif_set_frame(bj->bif, fno)) { $? ". set frame ok" data_ok = 0; bmeps_tool_calculate_areas(bj); origw = w = dkbif_get_width(bj->bif); origh = h = dkbif_get_height(bj->bif); if((bj->trans).must_rotate) { w = origh; h = origw; } number_of_filters = 2; if((bj->bo2)->enc & (BMEPS_ENCODING_FLATE)) { $? ". have flate or lzw" number_of_filters++; } if(bmeps_tool_calc_di(bj, &dinner, &douter, 0.05, 0.01)) { dummy = 0; ofs1 = dkstream_openfile(bj->tmp2, "wb", 0, &dummy); if(ofs1) { ofs2 = dkof_open(ofs1, number_of_filters); if(ofs2) { data_ok = 1; #if DEBUG if(!dkof_set(ofs2, 0, DK_OF_TYPE_BUFFERED)) { data_ok = 0; } if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) { if(!dkof_set(ofs2, 1, DK_OF_TYPE_BUFFERED)) { data_ok = 0; } } else { if(!dkof_set(ofs2, 1, DK_OF_TYPE_BUFFERED)) { data_ok = 0; } } dkof_set_crnl(ofs2, 1); if((bj->bo2)->enc & BMEPS_ENCODING_FLATE) { if(!dkof_set(ofs2, 2, DK_OF_TYPE_BUFFERED)) { data_ok = 0; } } else { } #else if(!dkof_set(ofs2, 0, DK_OF_TYPE_BUFFERED)) { data_ok = 0; } if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) { if(!dkof_set(ofs2, 1, DK_OF_TYPE_ASCII85)) { data_ok = 0; } } else { if(!dkof_set(ofs2, 1, DK_OF_TYPE_ASCIIHEX)) { data_ok = 0; } } dkof_set_crnl(ofs2, 1); if((bj->bo2)->enc & BMEPS_ENCODING_FLATE) { if(!dkof_set(ofs2, 2, DK_OF_TYPE_FLATE)) { data_ok = 0; } } else { } #endif if(data_ok) { if(dkof_start_chunk(ofs2)) { DKSP(67); DKSP(0); /* change color to red or black */ if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) { dkstream_puts_double(ofs2, r); DKSP(1); dkstream_puts_double(ofs2, g); DKSP(1); dkstream_puts_double(ofs2, b); DKSP(1); DKSP(70); } else { dkstream_puts_double(ofs2, black); DKSP(1); DKSP(69); } DKSP(0); /* border rectangle */ dkstream_puts_double(ofs2, (bj->trans).iu.x0); DKSP(1); dkstream_puts_double(ofs2, (bj->trans).iu.y0); DKSP(1); dkstream_puts_double(ofs2, ((bj->trans).iu.x1 - (bj->trans).iu.x0)); DKSP(1); dkstream_puts_double(ofs2, ((bj->trans).iu.y1 - (bj->trans).iu.y0)); DKSP(1); DKSP(75); DKSP(1); DKSP(74); DKSP(0); /* change color to gray */ dkstream_puts_double(ofs2, gray); DKSP(1); DKSP(69); DKSP(0); /* middle rectangle */ dkstream_puts_double( ofs2, ((bj->trans).iu.x0 + douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y0 + douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.x1 - (bj->trans).iu.x0 - 2.0 * douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y1 - (bj->trans).iu.y0 - 2.0 * douter.d) ); DKSP(1); DKSP(75); DKSP(1); DKSP(74); DKSP(0); /* change color to white */ dkstream_puts_double(ofs2, 1.0); DKSP(1); DKSP(69); DKSP(0); /* inner rectangle */ dkstream_puts_double( ofs2, ((bj->trans).iu.x0 + dinner.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y0 + dinner.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.x1 - (bj->trans).iu.x0 - 2.0 * dinner.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y1 - (bj->trans).iu.y0 - 2.0 * dinner.d) ); DKSP(1); DKSP(75); DKSP(1); DKSP(74); DKSP(0); /* change color to gray */ dkstream_puts_double(ofs2, gray); DKSP(1); DKSP(69); DKSP(0); /* large diagonal lines */ /* x0+douter.d y0+douter.d moveto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x0 + douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y0 + douter.d) ); DKSP(1); DKSP(71); DKSP(0); /* x0+douter.d+dinner.deltax y0+douter.d lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x0 + douter.d + dinner.deltax) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y0 + douter.d) ); DKSP(1); DKSP(72); DKSP(0); /* x1-douter.d y1-douter.d-dinner.deltay lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x1 - douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y1 - douter.d - dinner.deltay) ); DKSP(1); DKSP(72); DKSP(0); /* x1-douter.d y1-douter.d lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x1 - douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y1 - douter.d) ); DKSP(1); DKSP(72); DKSP(0); /* x1-douter.d-dinner.deltax y1-douter.d lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x1 - douter.d - dinner.deltax) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y1 - douter.d) ); DKSP(1); DKSP(72); DKSP(0); /* x0+douter.d y0+douter.d+dinnter.deltax lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x0 + douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y0 + douter.d + dinner.deltax) ); DKSP(1); DKSP(72); DKSP(0); /* closepath fill */ DKSP(73); DKSP(1); DKSP(74); DKSP(0); /* x0+douter.d y1-douter.d moveto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x0 + douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y1 - douter.d) ); DKSP(1); DKSP(71); DKSP(0); /* x0+douter.d y1-douter.d-dinner.deltay lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x0 + douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y1 - douter.d - dinner.deltay) ); DKSP(1); DKSP(72); DKSP(0); /* x1-douterd-dinner.deltax y0+douter.d lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x1 - douter.d - dinner.deltax) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y0 + douter.d) ); DKSP(1); DKSP(72); DKSP(0); /* x1-douter.d y0+douter.d lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x1 - douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y0 + douter.d) ); DKSP(1); DKSP(72); DKSP(0); /* x1-douter.d y0+douter.d+dinner.deltay lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x1 - douter.d) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y0 + douter.d + dinner.deltay) ); DKSP(1); DKSP(72); DKSP(0); /* x0+douter.d+dinner.deltax y1-douter.d lineto */ dkstream_puts_double( ofs2, ((bj->trans).iu.x0 + douter.d + dinner.deltax) ); DKSP(1); dkstream_puts_double( ofs2, ((bj->trans).iu.y1 - douter.d) ); DKSP(1); DKSP(72); DKSP(0); /* closepath fill */ DKSP(73); DKSP(1); DKSP(74); DKSP(0); /* change color to red or black */ if((bj->bo2)->opt & BMEPS_OPT_COLOR_OUTPUT) { dkstream_puts_double(ofs2, r); DKSP(1); dkstream_puts_double(ofs2, g); DKSP(1); dkstream_puts_double(ofs2, b); DKSP(1); DKSP(70); } else { dkstream_puts_double(ofs2, black); DKSP(1); DKSP(69); } DKSP(0); if(!dkof_end_chunk(ofs2)) { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 69); bj->exval = 1; data_ok = 0; } } else { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 68); bj->exval = 1; data_ok = 0; } } else { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 70); bj->exval = 1; } dkof_close(ofs2); ofs2 = NULL; } else { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 70); bj->exval = 1; } dkstream_close(ofs1); ofs1 = NULL; if(data_ok) { if(dkstat_get(&stbuf, bj->tmp2)) { filesize = (unsigned long)dkstat_size(&stbuf); gfile = fopen(bj->tmp2, "rb"); if(gfile) { pdf_begin_object(bj, psp+i); pdf_open_dictionary(bj); kw_out(bj, 0); kw_out(bj, 27); kw_out(bj, 0); kw_out(bj, 29); kw_out(bj, 1); pdf_write_reference(bj, bj->psp); kw_out(bj, 0); kw_out(bj, 28); kw_out(bj, 1); kw_out(bj, 10); dkstream_puts_ul(bj->os, (bj->trans).bb.x0); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.y0); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.x1); kw_out(bj, 1); dkstream_puts_ul(bj->os, (bj->trans).bb.y1); kw_out(bj, 11); kw_out(bj, 0); kw_out(bj, 30); kw_out(bj, 1); pdf_open_dictionary(bj); kw_out(bj, 1); kw_out(bj, 31); kw_out(bj, 1); kw_out(bj, 10); kw_out(bj, 33); kw_out(bj, 11); pdf_close_dictionary(bj); kw_out(bj, 0); kw_out(bj, 36); kw_out(bj, 1); pdf_write_reference(bj, csp+i); kw_out(bj, 0); pdf_close_dictionary(bj); kw_out(bj, 0); pdf_end_object(bj); pdf_begin_object(bj, csp+i); pdf_open_dictionary(bj); kw_out(bj, 38); kw_out(bj, 1); dkstream_puts_ul(bj->os, filesize); #if !DEBUG kw_out(bj, 1); kw_out(bj, 57); kw_out(bj, 1); kw_out(bj, 10); if((bj->bo2)->enc & BMEPS_ENCODING_ASCII85) { kw_out(bj, 42); } else { kw_out(bj, 41); } if((bj->bo2)->enc & BMEPS_ENCODING_FLATE) { kw_out(bj, 1); kw_out(bj, 44); } else { } kw_out(bj, 11); #endif pdf_close_dictionary(bj); kw_out(bj, 0); kw_out(bj, 39); kw_out(bj, 0); transfer_file_to_stream(bj->os, gfile, filesize); kw_out(bj, 40); kw_out(bj, 0); pdf_end_object(bj); fclose(gfile); gfile = NULL; } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 62, 63, bj->tmp2); bj->exval = 1; } } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 64, 65, bj->tmp2); bj->exval = 1; } } } else { bmeps_tool_msg_3(bj, DK_LOG_LEVEL_ERROR, 66, 67, bj->tmp2); bj->exval = 1; } } else { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 72); bj->exval = 1; } } else { bmeps_tool_msg_1(bj, DK_LOG_LEVEL_ERROR, 71); bj->exval = 1; } fno++; i++; $? ". end of loop" } $? "- pdf_file_objects_draft" } static void pdf_file_objects DK_P2(BJ *,bj, int,how) { switch(how) { case 1: { $? ". dct" #if DK_HAVE_JPEGLIB_H pdf_file_objects_dct(bj); #else pdf_file_objects_normally(bj); #endif } break; case 2: { $? ". draft" pdf_file_objects_draft(bj); } break; default: { $? ". normally" pdf_file_objects_normally(bj); } break; } } static void pdf_file_end DK_P2(BJ *,bj, int,how) { unsigned long i; unsigned long pos, start_xref; char buffer[32]; PDFOBJPOS *pop; start_xref = dkstream_get_bytes_written(bj->os); kw_out(bj, 12); kw_out(bj, 1); dkstream_puts_ul(bj->os, 0UL); kw_out(bj, 1); dkstream_puts_ul(bj->os, bj->nexto); kw_out(bj, 0); kw_out(bj, 16); kw_out(bj, 0); for(i = 1UL; i < bj->nexto; i++) { pos = 0UL; pop = dksto_it_find_like(bj->pdfobjsi, (void *)(&i), 1); if(pop) { pos = pop->pos; } sprintf(buffer, kw[17], pos); dkstream_puts(bj->os, buffer); kw_out(bj, 0); } kw_out(bj, 13); kw_out(bj, 0); pdf_open_dictionary(bj); kw_out(bj, 1); kw_out(bj, 18); kw_out(bj, 1); dkstream_puts_ul(bj->os, bj->nexto); kw_out(bj, 1); kw_out(bj, 19); kw_out(bj, 1); pdf_close_dictionary(bj); kw_out(bj, 0); kw_out(bj, 14); kw_out(bj, 0); dkstream_puts_ul(bj->os, start_xref); kw_out(bj, 0); kw_out(bj, 15); kw_out(bj, 0); } /* 0 ... normal 1 ... DCT 2 ... draft */ void bmeps_pdf DK_P2(BJ *,bj, int,how) { PDFOBJPOS *pop; BO mybo; if(bj) { bj->bo2 = &mybo; bj->pdfobjs = dksto_open(0); if(bj->pdfobjs) { dksto_set_comp(bj->pdfobjs, compare_obj_pos, 0); bj->pdfobjsi = dksto_it_open(bj->pdfobjs); if(bj->pdfobjsi) { bj->nexto = 1UL; bj->frame_n = bj->frame_e - bj->frame_s + 1L; pdf_file_start(bj, how); pdf_file_objects(bj, how); pdf_file_end(bj, how); dksto_it_reset(bj->pdfobjsi); /* release objects */ while((pop = dksto_it_next(bj->pdfobjsi)) != NULL) { dk_delete(pop); } dksto_it_close(bj->pdfobjsi); bj->pdfobjsi = NULL; } else { bmeps_tool_error_memory(bj); } dksto_close(bj->pdfobjs); bj->pdfobjs = NULL; } else { bmeps_tool_error_memory(bj); } bj->bo2 = NULL; } } #ifndef LINT static char sccs_id[] = { "@(#)b2pdf.ctr 1.7 01/03/07\tbmeps2" }; #endif