[gs-cvs] rev 7524 - trunk/gs/src
ray at ghostscript.com
ray at ghostscript.com
Fri Dec 22 11:59:44 PST 2006
Author: ray
Date: 2006-12-22 11:59:43 -0800 (Fri, 22 Dec 2006)
New Revision: 7524
Modified:
trunk/gs/src/gdevpdfu.c
Log:
Properly handle ASCII85EncodePages=true for the Contents streams. This was
not implemented previously. Bug #689030 for customer #1.
EXPECTED DIFFERENCES:
None. (We don't test ASCII85EncodePages=true in regression testing).
Modified: trunk/gs/src/gdevpdfu.c
===================================================================
--- trunk/gs/src/gdevpdfu.c 2006-12-21 17:10:15 UTC (rev 7523)
+++ trunk/gs/src/gdevpdfu.c 2006-12-22 19:59:43 UTC (rev 7524)
@@ -328,7 +328,6 @@
pdev->OPDFRead_procset_length = stell(s);
}
pprintd2(s, "%%PDF-%d.%d\n", level / 10, level % 10);
- pdev->binary_ok = !pdev->params.ASCII85EncodePages;
if (pdev->binary_ok)
stream_puts(s, "%\307\354\217\242\n");
}
@@ -537,8 +536,12 @@
pdev->contents_length_id = pdf_obj_ref(pdev);
s = pdev->strm;
pprintld1(s, "<</Length %ld 0 R", pdev->contents_length_id);
- if (pdev->compression == pdf_compress_Flate)
- pprints1(s, "/Filter /%s", compression_filter_name);
+ if (pdev->compression == pdf_compress_Flate) {
+ if (pdev->binary_ok)
+ pprints1(s, "/Filter /%s", compression_filter_name);
+ else
+ pprints1(s, "/Filter [/ASCII85Decode /%s]", compression_filter_name);
+ }
stream_puts(s, ">>\nstream\n");
pdev->contents_pos = pdf_stell(pdev);
code = pdf_begin_encrypt(pdev, &s, pdev->contents_id);
@@ -546,14 +549,36 @@
return code;
pdev->strm = s;
if (pdev->compression == pdf_compress_Flate) { /* Set up the Flate filter. */
- const stream_template *template = &compression_filter_template;
- stream *es = s_alloc(pdev->pdf_memory, "PDF compression stream");
- byte *buf = gs_alloc_bytes(pdev->pdf_memory, sbuf_size,
+ const stream_template *template;
+ stream *es;
+ byte *buf;
+ compression_filter_state *st;
+
+ if (!pdev->binary_ok) { /* Set up the A85 filter */
+ const stream_template *template = &s_A85E_template;
+ stream *as = s_alloc(pdev->pdf_memory, "PDF contents stream");
+ byte *buf = gs_alloc_bytes(pdev->pdf_memory, sbuf_size,
+ "PDF contents buffer");
+ stream_A85E_state *ast = gs_alloc_struct(pdev->pdf_memory, stream_A85E_state,
+ template->stype, "PDF contents state");
+ if (as == 0 || ast == 0 || buf == 0)
+ return_error(gs_error_VMerror);
+ s_std_init(as, buf, sbuf_size, &s_filter_write_procs,
+ s_mode_write);
+ ast->memory = pdev->pdf_memory;
+ ast->template = template;
+ as->state = (stream_state *) ast;
+ as->procs.process = template->process;
+ as->strm = s;
+ (*template->init) ((stream_state *) ast);
+ pdev->strm = s = as;
+ }
+ template = &compression_filter_template;
+ es = s_alloc(pdev->pdf_memory, "PDF compression stream");
+ buf = gs_alloc_bytes(pdev->pdf_memory, sbuf_size,
"PDF compression buffer");
- compression_filter_state *st =
- gs_alloc_struct(pdev->pdf_memory, compression_filter_state,
+ st = gs_alloc_struct(pdev->pdf_memory, compression_filter_state,
template->stype, "PDF compression state");
-
if (es == 0 || st == 0 || buf == 0)
return_error(gs_error_VMerror);
s_std_init(es, buf, sbuf_size, &s_filter_write_procs,
@@ -646,10 +671,17 @@
} else {
if (pdev->vgstack_depth)
pdf_restore_viewer_state(pdev, s);
- if (pdev->compression_at_page_start == pdf_compress_Flate) { /* Terminate the Flate filter. */
+ if (pdev->compression_at_page_start == pdf_compress_Flate) { /* Terminate the filters. */
stream *fs = s->strm;
- sclose(s);
+ if (!pdev->binary_ok) {
+ sclose(s); /* Terminate the ASCII85 filter. */
+ gs_free_object(pdev->pdf_memory, s->cbuf, "A85E contents buffer");
+ gs_free_object(pdev->pdf_memory, s, "A85E contents stream");
+ pdev->strm = s = fs;
+ fs = s->strm;
+ }
+ sclose(s); /* Next terminate the compression filter */
gs_free_object(pdev->pdf_memory, s->cbuf, "zlib buffer");
gs_free_object(pdev->pdf_memory, s, "zlib stream");
pdev->strm = s = fs;
More information about the gs-cvs
mailing list