1 50 51 package com.lowagie.text.pdf; 52 53 import java.io.ByteArrayOutputStream ; 54 import java.io.OutputStream ; 55 import java.util.zip.DeflaterOutputStream ; 56 57 import com.lowagie.text.DocWriter; 58 import com.lowagie.text.Document; 59 import com.lowagie.text.Rectangle; 60 61 64 65 class PdfContents extends PdfStream { 66 67 static final byte SAVESTATE[] = DocWriter.getISOBytes("q\n"); 68 static final byte RESTORESTATE[] = DocWriter.getISOBytes("Q\n"); 69 static final byte ROTATE90[] = DocWriter.getISOBytes("0 1 -1 0 "); 70 static final byte ROTATE180[] = DocWriter.getISOBytes("-1 0 0 -1 "); 71 static final byte ROTATE270[] = DocWriter.getISOBytes("0 -1 1 0 "); 72 static final byte ROTATEFINAL[] = DocWriter.getISOBytes(" cm\n"); 73 75 84 85 PdfContents(PdfContentByte under, PdfContentByte content, PdfContentByte text, PdfContentByte secondContent, Rectangle page) throws BadPdfFormatException { 86 super(); 87 try { 88 OutputStream out = null; 89 streamBytes = new ByteArrayOutputStream (); 90 if (Document.compress) 91 { 92 compressed = true; 93 out = new DeflaterOutputStream (streamBytes); 94 } 95 else 96 out = streamBytes; 97 int rotation = page.getRotation(); 98 switch (rotation) { 99 case 90: 100 out.write(ROTATE90); 101 out.write(DocWriter.getISOBytes(ByteBuffer.formatDouble(page.getTop()))); 102 out.write(' '); 103 out.write('0'); 104 out.write(ROTATEFINAL); 105 break; 106 case 180: 107 out.write(ROTATE180); 108 out.write(DocWriter.getISOBytes(ByteBuffer.formatDouble(page.getRight()))); 109 out.write(' '); 110 out.write(DocWriter.getISOBytes(ByteBuffer.formatDouble(page.getTop()))); 111 out.write(ROTATEFINAL); 112 break; 113 case 270: 114 out.write(ROTATE270); 115 out.write('0'); 116 out.write(' '); 117 out.write(DocWriter.getISOBytes(ByteBuffer.formatDouble(page.getRight()))); 118 out.write(ROTATEFINAL); 119 break; 120 } 121 if (under.size() > 0) { 122 out.write(SAVESTATE); 123 under.getInternalBuffer().writeTo(out); 124 out.write(RESTORESTATE); 125 } 126 if (content.size() > 0) { 127 out.write(SAVESTATE); 128 content.getInternalBuffer().writeTo(out); 129 out.write(RESTORESTATE); 130 } 131 if (text != null) { 132 out.write(SAVESTATE); 133 text.getInternalBuffer().writeTo(out); 134 out.write(RESTORESTATE); 135 } 136 if (secondContent.size() > 0) { 137 secondContent.getInternalBuffer().writeTo(out); 138 } 139 out.close(); 140 } 141 catch (Exception e) { 142 throw new BadPdfFormatException(e.getMessage()); 143 } 144 put(PdfName.LENGTH, new PdfNumber(streamBytes.size())); 145 if (compressed) 146 put(PdfName.FILTER, PdfName.FLATEDECODE); 147 } 148 } | Popular Tags |