[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#595777: unblock: pdftk/1.41+dfsg-9



On Mon, Sep  6, 2010 at 23:34 +0200, Julien Cristau wrote:
> On Mon, Sep  6, 2010 at 17:56:19 +0200, Johann Felix Soden wrote:
> 
> >  .../{support_uncompression => support_compression} |   69 +++++++++++++------
> 
> Care to provide a diff between the old and new patches? (I'm lazy, and
> debdiff doesn't know to do that.)
>
No problem, the diff between support_uncompression and
support_compression is attached.

Regards,
 Johann Felix Soden



diff -u b/pdftk/pdftk.cc b/pdftk/pdftk.cc
--- b/pdftk/pdftk.cc
+++ b/pdftk/pdftk.cc
@@ -159,8 +159,22 @@
 	}
 }
 
-void uncompress_stream(itext::PRStream* stream)
+void change_compression_stream(itext::PRStream* stream, bool compress_mode )
 {
+	if( compress_mode )
+	{
+
+		try {
+			stream->setData(  itext::PdfReader::getStreamBytes( stream ), compress_mode );
+		}
+		catch (itext::exceptions::UnsupportedPdfException * err ) { // unknow filter detected
+			// ignore this
+		}
+		return;
+	}
+
+	// ----- uncompress -----
+
 	try { // try first itext own way
 		stream->setData( itext::PdfReader::getStreamBytes( stream ) );
 		stream->remove( itext::PdfName::FILTER );
@@ -242,16 +256,16 @@
 }
 
 
-void uncompress_dictionary( itext::PdfDictionary *dict, itext::PdfReader *reader )
+void change_compression_dictionary( itext::PdfDictionary *dict, itext::PdfReader *reader, bool compress_mode )
 {
 	if( !dict )
 		return;
 
 	// prevent circuit references
-	static set<void*> already_uncompressed;
-	if( already_uncompressed.find(dict) != already_uncompressed.end() )
+	static set<void*> already_handled;
+	if( already_handled.find(dict) != already_handled.end() )
 		return;
-	already_uncompressed.insert(dict);
+	already_handled.insert(dict);
 
 	java::util::Iterator * keys=dict->getKeys()->iterator();
 	while( keys->hasNext() ) {
@@ -265,18 +279,19 @@
 		if( !obj || obj == dict )
 			continue;
 		if( obj->isDictionary() )
-			uncompress_dictionary( (itext::PdfDictionary*)obj,reader );
+			change_compression_dictionary( (itext::PdfDictionary*)obj, reader, compress_mode );
 		if( obj->isStream() )
-			uncompress_stream( (itext::PRStream*) obj );
+			change_compression_stream( (itext::PRStream*) obj, compress_mode );
 	}
 }
 
-void uncompress( itext::PdfReader * reader )
+void change_compression( itext::PdfReader * reader, bool compress_mode )
 {
 	int pages = reader->getNumberOfPages();
+	itext::Document::Document::compress = compress_mode;
 
 	itext::PdfDictionary *catalog = reader->getCatalog();
-	uncompress_dictionary( catalog, reader );
+	change_compression_dictionary( catalog, reader, compress_mode );
 
 	for( int i=1; i<reader->getXrefSize(); i++ )
 	{
@@ -284,14 +299,14 @@
 		if(!obj)
 			continue;
 		if( obj->isDictionary() )
-			uncompress_dictionary( (itext::PdfDictionary*)obj, reader );
+			change_compression_dictionary( (itext::PdfDictionary*)obj, reader, compress_mode );
 		if( obj->isStream() )
-			uncompress_stream( (itext::PRStream*)obj );
+			change_compression_stream( (itext::PRStream*)obj, compress_mode );
 	}
 
 	for( int i = 1; i <= pages; i++ )
 	{
-		reader->setPageContent( i, reader->getPageContent( i ), 0 );
+		reader->setPageContent( i, reader->getPageContent( i ));
 	}
 }
 
@@ -651,6 +666,7 @@
 		return filt_uncompress_k;
 	}
 	else if( strcmp( ss_copy, "compress" )== 0 ) {
+		itext::Document::Document::compress=true;
 		return filt_compress_k;
 	}
 	else if( strcmp( ss_copy, "flatten" )== 0 ) {
@@ -2280,11 +2296,12 @@
 
 								//
 								if( m_output_uncompress_b ) {
-									uncompress(input_reader_p);
+									change_compression(input_reader_p, false );
 									add_mark_to_page( input_reader_p, it->m_page_num, output_page_count+ 1 );
 									writer_p->setCompressionLevel(0);
 								}
 								else if( m_output_compress_b ) {
+									change_compression(input_reader_p, true );
 									remove_mark_from_page( input_reader_p, it->m_page_num );
 									writer_p->setCompressionLevel(9);
 								}
@@ -2358,13 +2375,14 @@
 
 					// un/compress output streams?
 					if( m_output_uncompress_b ) {
+						change_compression( input_reader_p, false );
 						// Absent from itext-2.1.4
 // 						writer_p->filterStreams= true;
 // 						writer_p->compressStreams= false;
  						writer_p->setCompressionLevel(0);
-						uncompress(input_reader_p);
 					}
 					else if( m_output_compress_b ) {
+						change_compression( input_reader_p, true );
 						// Absent from itext-2.1.4
 // 						writer_p->filterStreams= false;
 // 						writer_p->compressStreams= true;
@@ -2600,7 +2618,7 @@
 
 				// un/compress output streams?
 				if( m_output_uncompress_b ) {
-					uncompress(input_reader_p);
+					change_compression( input_reader_p, false );
 					add_marks_to_pages( input_reader_p );
 					// Absent from itext-2.1.4
 // 					writer_p->filterStreams= true;
@@ -2608,6 +2626,7 @@
  					writer_p->setCompressionLevel(0);
 				}
 				else if( m_output_compress_b ) {
+					change_compression( input_reader_p, true );
 					remove_marks_from_pages( input_reader_p );
 					// Absent from itext-2.1.4
 // 					writer_p->filterStreams= false;

Reply to: