IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 41327


Ignore:
Timestamp:
Apr 7, 2020, 1:09:55 PM (6 years ago)
Author:
eugene
Message:

set PDF mode to ascii85 / deflate

Location:
trunk/Ohana/src/kapa2/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/kapa2/src/PDF_Objects.c

    r41320 r41327  
    8585  }
    8686  // reset to default color and style
    87   PrintIOBuffer (buffer, "[] 0 d\n");
    88   PrintIOBuffer (buffer, "0.00 0.00 0.00 rg\n");
    89   PrintIOBuffer (buffer, "0.00 0.00 0.00 RG\n");
     87  // PrintIOBuffer (buffer, "[] 0 d\n");
     88  // PrintIOBuffer (buffer, "0.00 0.00 0.00 rg\n");
     89  // PrintIOBuffer (buffer, "0.00 0.00 0.00 RG\n");
    9090
    9191  return (TRUE);
     
    117117      break;
    118118    case KAPA_LINE_SOLID: // no need to call 'd' as solid is the default
     119      PrintIOBuffer (buffer, "[] 0 d\n");
    119120    default:
    120121      break;
     
    129130int PDF_ObjectsN (KapaGraphWidget *graph, Gobjects *object, IOBuffer *buffer) {
    130131 
     132  // AlphaSet emits a "q" whether or not there is a non-trivial alpha value
     133  PDF_AlphaSet (object, buffer);
    131134  PDF_LineStyle (graph, object, buffer);
    132   PDF_AlphaSet (object, buffer);
    133135
    134136  switch (object->style) {
     
    163165  // this closes the graphic state generated by PDF_AlphaSet above
    164166  PrintIOBuffer (buffer, "Q\n");
     167
     168  // reset to default color and style
     169  // PrintIOBuffer (buffer, "[] 0 d\n");
     170  // PrintIOBuffer (buffer, "0.00 0.00 0.00 rg\n");
     171  // PrintIOBuffer (buffer, "0.00 0.00 0.00 RG\n");
    165172
    166173  return (TRUE);
  • trunk/Ohana/src/kapa2/src/PDF_PrintUtils.c

    r41320 r41327  
    114114}
    115115
     116typedef enum {
     117  PDF_RAW_ENCODE,
     118  PDF_ASCII_HEX,
     119  PDF_ASCII_ADOBE,
     120  PDF_ASCII_HEX_DEFLATE,
     121  PDF_ASCII_ADOBE_DEFLATE,
     122} PDF_Encoding_Mode;
     123
    116124// This code needs to generate a stream
    117125int PDF_WriteStream (PDF_FILE *obj, IOBuffer *buffer) {
     
    135143  }
    136144
    137   // test compression of the stream:
    138   if (1) {
    139     // Deflate buffer.buffer
    140     IOBuffer compressed;
    141     PDF_BufferDeflate (&compressed, buffer);
    142 
    143     if (0) {
    144       IOBuffer iTest, oTest;
    145       InitIOBuffer (&iTest, 8);
    146       strcpy (iTest.buffer, "Lion");
    147       iTest.Nbuffer = strlen(iTest.buffer);
    148       fprintf (stderr, "%s\n", iTest.buffer);
    149       PDF_ASCII85Encode (&oTest, &iTest);
    150       fprintf (stderr, "%s\n", oTest.buffer);
     145  // compression options:
     146  PDF_Encoding_Mode mode = PDF_ASCII_ADOBE_DEFLATE;
     147  // PDF_Encoding_Mode mode = PDF_RAW_ENCODE;
     148  switch (mode) {
     149    case PDF_ASCII_ADOBE: {
     150      IOBuffer encode;
     151      PDF_ASCII85Encode (&encode, buffer);
     152
     153      // Content Stream
     154      PDF_Print (obj, objnum, "%d 0 obj << /Length %d /Filter [/ASCII85Decode] >> stream\n", objnum, encode.Nbuffer);
     155      fwrite (encode.buffer, 1, encode.Nbuffer, obj->f);
     156      break;
     157    }
     158    case PDF_ASCII_ADOBE_DEFLATE: {
     159      IOBuffer compressed;
     160      PDF_BufferDeflate (&compressed, buffer);
     161
     162      IOBuffer encode;
     163      PDF_ASCII85Encode (&encode, &compressed);
     164
     165      // Content Stream
     166      PDF_Print (obj, objnum, "%d 0 obj << /Length %d /Filter [/ASCII85Decode /FlateDecode] >> stream\n", objnum, encode.Nbuffer);
     167      fwrite (encode.buffer, 1, encode.Nbuffer, obj->f);
     168      break;
     169    }
     170    case PDF_ASCII_HEX: {
     171      IOBuffer encode;
     172      PDF_ASCIIHexEncode (&encode, buffer);
     173
     174      // Content Stream
     175      PDF_Print (obj, objnum, "%d 0 obj << /Length %d /Filter [/ASCIIHexDecode] >> stream\n", objnum, encode.Nbuffer);
     176      fwrite (encode.buffer, 1, encode.Nbuffer, obj->f);
     177      break;
     178    }
     179    case PDF_ASCII_HEX_DEFLATE: {
     180      IOBuffer compressed;
     181      PDF_BufferDeflate (&compressed, buffer);
     182
     183      IOBuffer encode;
     184      PDF_ASCIIHexEncode (&encode, &compressed);
     185
     186      // Content Stream
     187      PDF_Print (obj, objnum, "%d 0 obj << /Length %d /Filter [/ASCIIHexDecode /FlateDecode] >> stream\n", objnum, encode.Nbuffer);
     188      fwrite (encode.buffer, 1, encode.Nbuffer, obj->f);
     189      break;
     190    }
     191    case PDF_RAW_ENCODE: {
     192      PDF_Print (obj, objnum, "%d 0 obj << /Length %d >> stream\n", objnum, buffer->Nbuffer);
     193      fwrite (buffer->buffer, 1, buffer->Nbuffer, obj->f);
     194      break;
    151195    }
    152 
    153     if (0) {
    154       char quote[] = "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.";
    155       fprintf (stderr, "%d : %s\n", (int) strlen(quote), quote);
    156       IOBuffer iTest, oTest;
    157       InitIOBuffer (&iTest, strlen(quote) + 1);
    158       strcpy (iTest.buffer, quote);
    159       iTest.Nbuffer = strlen(iTest.buffer);
    160       PDF_ASCII85Encode (&oTest, &iTest);
    161       fprintf (stderr, "%s\n", oTest.buffer);
    162       return FALSE;
    163     }
    164 
    165     // ASCIIHex encode
    166     IOBuffer encode;
    167     // XXX PDF_ASCIIHexEncode (&encode, buffer);
    168     // PDF_ASCIIHexEncode (&encode, &compressed);
    169     PDF_ASCII85Encode (&encode, &compressed);
    170 
    171     // Content Stream
    172     PDF_Print (obj, objnum, "%d 0 obj << /Length %d /Filter [/ASCII85Decode /FlateDecode] >> stream\n", objnum, encode.Nbuffer);
    173     // PDF_Print (obj, objnum, "%d 0 obj << /Length %d /Filter [/ASCIIHexDecode /FlateDecode] >> stream\n", objnum, encode.Nbuffer);
    174     // XXX PDF_Print (obj, objnum, "%d 0 obj << /Length %d /Filter [/ASCIIHexDecode] >> stream\n", objnum, encode.Nbuffer);
    175     fwrite (encode.buffer, 1, encode.Nbuffer, obj->f);
    176   } else {
    177     // Content Stream
    178     PDF_Print (obj, objnum, "%d 0 obj << /Length %d >> stream\n", objnum, buffer->Nbuffer);
    179 
    180     // write stream here
    181     // XXX check return to make sure all went to disk
    182     fwrite (buffer->buffer, 1, buffer->Nbuffer, obj->f);
    183   }
     196  }
     197  // XXX check fwrite return to make sure all went to disk
    184198
    185199  fprintf (obj->f, "endstream endobj\n");
     
    422436// base85_init();
    423437// if (!base85_encode (output, Nout, (BASETYPE *) quote, 1)) { fprintf (stderr, "failure\n"); }
     438
     439// test compression of the stream:
     440int PDF_Encode_Test () {
     441
     442  if (0) {
     443    IOBuffer iTest, oTest;
     444    InitIOBuffer (&iTest, 8);
     445    strcpy (iTest.buffer, "Lion");
     446    iTest.Nbuffer = strlen(iTest.buffer);
     447    fprintf (stderr, "%s\n", iTest.buffer);
     448    PDF_ASCII85Encode (&oTest, &iTest);
     449    fprintf (stderr, "%s\n", oTest.buffer);
     450  }
     451
     452  if (0) {
     453    char quote[] = "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.";
     454    fprintf (stderr, "%d : %s\n", (int) strlen(quote), quote);
     455    IOBuffer iTest, oTest;
     456    InitIOBuffer (&iTest, strlen(quote) + 1);
     457    strcpy (iTest.buffer, quote);
     458    iTest.Nbuffer = strlen(iTest.buffer);
     459    PDF_ASCII85Encode (&oTest, &iTest);
     460    fprintf (stderr, "%s\n", oTest.buffer);
     461    return FALSE;
     462  }
     463  return TRUE;
     464}
     465
Note: See TracChangeset for help on using the changeset viewer.