Author: ken
Date: 2008-03-27 01:37:58 -0700 (Thu, 27 Mar 2008)
New Revision: 8611

Modified:
   trunk/gs/src/gdevpdfb.c
   trunk/gs/src/gdevpdfo.c
   trunk/gs/src/gdevpdfu.c
   trunk/gs/src/gdevpdti.c
Log:
Fix (pdfwrite): endstream/endobj not always emitted PDF/A compliant.

Details:
Bug #689755 "Keywords endstream and endobj not always preceded by EOL when generating".

The PDF/A specification mandates that the endstream and endobj operators
are always preceded by an EOL character (in the spec, EOL = carriage return,
linefeed, or carriage return/linefeed pair). 

(gdevpdfb.c)
(gdevpdfu.c)
(gdevpdti.c) Ensure all endstream operators are preceded by a '\n' if we
 are producing PDF/A.
(gdevpdfo.c) Add '\n' to the end of array and dictionary objects in
 cos_array_write and cos_dict_write, if we are producing PDF/A. This
 ensures that endobj is always preceded by a EOL as other object types
 already conform.

EXPECTED DIFFERENCES:
None.


Modified: trunk/gs/src/gdevpdfb.c
===================================================================
--- trunk/gs/src/gdevpdfb.c	2008-03-26 14:02:02 UTC (rev 8610)
+++ trunk/gs/src/gdevpdfb.c	2008-03-27 08:37:58 UTC (rev 8611)
@@ -569,7 +569,10 @@
 
 	    sprintf(buf, "/R%ld Do\n", image_id);
 	    pprintd1(s, "%d>>stream\n", strlen(buf));
-	    pprints1(s, "%sendstream\n", buf);
+	    if (pdev->PDFA)
+		pprints1(s, "%s\nendstream\n", buf);
+	    else
+		pprints1(s, "%sendstream\n", buf);
 	    pdf_end_resource(pdev);
 	} else {
 	    length_id = pdf_obj_ref(pdev);

Modified: trunk/gs/src/gdevpdfo.c
===================================================================
--- trunk/gs/src/gdevpdfo.c	2008-03-26 14:02:02 UTC (rev 8610)
+++ trunk/gs/src/gdevpdfo.c	2008-03-27 08:37:58 UTC (rev 8611)
@@ -524,6 +524,8 @@
     }
     DISCARD(cos_array_reorder(pca, first));
     stream_puts(s, "]");
+    if (pdev->PDFA)
+        stream_puts(s, "\n");
     return 0;
 }
 
@@ -790,6 +792,8 @@
     stream_puts(s, "<<");
     cos_elements_write(s, ((const cos_dict_t *)pco)->elements, pdev, false, object_id);
     stream_puts(s, ">>");
+    if (pdev->PDFA)
+        stream_puts(s, "\n");
     return 0;
 }
 

Modified: trunk/gs/src/gdevpdfu.c
===================================================================
--- trunk/gs/src/gdevpdfu.c	2008-03-26 14:02:02 UTC (rev 8610)
+++ trunk/gs/src/gdevpdfu.c	2008-03-27 08:37:58 UTC (rev 8611)
@@ -689,6 +689,8 @@
 	pdf_end_encrypt(pdev);
     	s = pdev->strm;
 	length = pdf_stell(pdev) - pdev->contents_pos;
+	if (pdev->PDFA)
+	    stream_puts(s, "\n");
 	stream_puts(s, "endstream\n");
 	pdf_end_obj(pdev);
 	pdf_open_obj(pdev, pdev->contents_length_id);

Modified: trunk/gs/src/gdevpdti.c
===================================================================
--- trunk/gs/src/gdevpdti.c	2008-03-26 14:02:02 UTC (rev 8610)
+++ trunk/gs/src/gdevpdti.c	2008-03-27 08:37:58 UTC (rev 8611)
@@ -347,6 +347,8 @@
     sseek(s, start_pos - 15);
     pprintd1(s, "%d", length);
     sseek(s, end_pos);
+    if (pdev->PDFA)
+	stream_puts(s, "\n");
     stream_puts(s, "endstream\n");
     pdf_end_separate(pdev);
     return 0;

_______________________________________________
gs-cvs mailing list
gs-cvs@ghostscript.com
http://www.ghostscript.com/mailman/listinfo/gs-cvs
