Recently I’ve continued the porting of iText adding the support for a new image type: multipage tif.
The only problem with this update is that actually it’s really slow and probably with very complex image files it can hang the player for too long. Probably I should modify the ImageElement.getInstance method and make it asynchronous in order to prevent flash player to freeze…
Anyway, the current trunk version of purePDF can handle TIF image and here a simple code example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.net.FileReference; import flash.utils.ByteArray; import flash.utils.Timer; import flash.utils.getQualifiedClassName; import org.purepdf.elements.RectangleElement; import org.purepdf.elements.images.ImageElement; import org.purepdf.io.RandomAccessFileOrArray; import org.purepdf.pdf.PageSize; import org.purepdf.pdf.PdfDocument; import org.purepdf.pdf.PdfViewPreferences; import org.purepdf.pdf.PdfWriter; import org.purepdf.pdf.codec.TiffImage; public class TestTIF extends Sprite { [Embed( source="assets/foxdog_multiplepages.tif", mimeType="application/octet-stream" )] private var cls1: Class; private var document: PdfDocument; private var writer: PdfWriter; private var buffer: ByteArray; private var filename: String; private var index: int; private var pages: int; private var stream: RandomAccessFileOrArray; public function TestTIF() { super(); addEventListener( Event.ADDED_TO_STAGE, onAdded ); } private function onAdded( event: Event ): void { stage.addEventListener( MouseEvent.CLICK, onClick ); } private function createDocument( subject: String = null, rect: RectangleElement = null ): void { buffer = new ByteArray(); if ( rect == null ) rect = PageSize.A4; writer = PdfWriter.create( buffer, rect ); document = writer.pdfDocument; document.addTitle( getQualifiedClassName( this ) ); if ( subject ) document.addSubject( subject ); document.setViewerPreferences( PdfViewPreferences.FitWindow ); } private function onClick( event: Event ): void { filename = getQualifiedClassName( this ).split( "::" ).pop() + ".pdf"; var byte: ByteArray = new cls1(); stream = new RandomAccessFileOrArray( byte ); var image: ImageElement = ImageElement.getInstance( byte ); createDocument( "Multi page TIFF Image Example", PageSize.A4 ); document.open(); // add the first page to the document document.add( image ); // get the total number of pages pages = TiffImage.getNumberOfPages( stream ); trace("number of pages: " + pages ); // next page index to add to document (first page is 1) index = 2; var timer: Timer = new Timer( 100, 1 ); timer.addEventListener( TimerEvent.TIMER, onTimerComplete ); timer.start(); } private function onComplete(): void { stream.close(); document.close(); save(); } private function onTimerComplete( event: TimerEvent ): void { if ( index > pages ) { onComplete(); return; } document.add( TiffImage.getTiffImage( stream, index ) ); index++; Timer( event.target ).reset(); Timer( event.target ).start(); } private function save( e: * = null ): void { var f: FileReference = new FileReference(); f.save( buffer, filename ); } } } |
Here you can see the result PDF file.
And here the input TIF image.
Pingback: Tweets that mention Multipage TIF to PDF -- Topsy.com