ByteArrayOutputStream output = new ByteArrayOutputStream();
//BJL 9/25/2004 Must prepend existing stream
//because it might have operators to draw things like
//rectangles and such
ContentStreamWriter writer = new ContentStreamWriter( output );
writer.writeTokens( tokens );
output.write( " /Tx BMC\n".getBytes("ISO-8859-1") );
insertGeneratedAppearance( widget, output, pdFont, tokens, appearanceStream );
output.write( " EMC".getBytes("ISO-8859-1") );
writeToStream( output.toByteArray(), appearanceStream );
}
else
{
if( tokens != null )
{
if( daTokens != null )
{
int bmcIndex = tokens.indexOf( PDFOperator.getOperator( "BMC" ));
int emcIndex = tokens.indexOf( PDFOperator.getOperator( "EMC" ));
if( bmcIndex != -1 && emcIndex != -1 &&
emcIndex == bmcIndex+1 )
{
//if the EMC immediately follows the BMC index then should
//insert the daTokens inbetween the two markers.
tokens.addAll( emcIndex, daTokens );
}
}
ByteArrayOutputStream output = new ByteArrayOutputStream();
ContentStreamWriter writer = new ContentStreamWriter( output );
float fontSize = calculateFontSize( pdFont, appearanceStream.getBoundingBox(), tokens, null );
boolean foundString = false;
for( int i=0; i<tokens.size(); i++ )
{
if( tokens.get( i ) instanceof COSString )
{
foundString = true;
COSString drawnString =((COSString)tokens.get(i));
drawnString.reset();
drawnString.append( apValue.getBytes("ISO-8859-1") );
}
}
int setFontIndex = tokens.indexOf( PDFOperator.getOperator( "Tf" ));
tokens.set( setFontIndex-1, new COSFloat( fontSize ) );
if( foundString )
{
writer.writeTokens( tokens );
}
else
{
int bmcIndex = tokens.indexOf( PDFOperator.getOperator( "BMC" ) );
int emcIndex = tokens.indexOf( PDFOperator.getOperator( "EMC" ) );
if( bmcIndex != -1 )
{
writer.writeTokens( tokens, 0, bmcIndex+1 );
}
else
{
writer.writeTokens( tokens );
}
output.write( "\n".getBytes("ISO-8859-1") );
insertGeneratedAppearance( widget, output,
pdFont, tokens, appearanceStream );
if( emcIndex != -1 )
{
writer.writeTokens( tokens, emcIndex, tokens.size() );
}
}
writeToStream( output.toByteArray(), appearanceStream );
}
else