Hi List,

I am trying to compile and run the ReplaceString.java example. When I
try to run the jar I get the following message:

 Exception in thread "main" java.lang.NoClassDefFoundError:

Here is my java [comments remove for posting]:

package mypdfbox;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import org.pdfbox.cos.COSArray;
import org.pdfbox.cos.COSString;
import org.pdfbox.exceptions.COSVisitorException;
import org.pdfbox.pdfparser.PDFStreamParser;
import org.pdfbox.pdfwriter.ContentStreamWriter;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.pdmodel.PDPage;
import org.pdfbox.pdmodel.common.PDStream;
import org.pdfbox.util.PDFOperator;

public class ReplaceString
{ 
    public ReplaceString()
    {
        super();
    }
 
    public void doIt( String inputFile, String outputFile, String
strToFind, String message) 
        throws IOException, COSVisitorException
    {
        PDDocument doc = null;
        try
        {
            doc = PDDocument.load( inputFile );
            List pages = doc.getDocumentCatalog().getAllPages();
            for( int i=0; i<pages.size(); i++ )
            {
                PDPage page = (PDPage)pages.get( i );
                PDStream contents = page.getContents();
                PDFStreamParser parser = new
PDFStreamParser(contents.getStream() );
                parser.parse();
                List tokens = parser.getTokens();
                for( int j=0; j<tokens.size(); j++ )
                {
                    Object next = tokens.get( j );
                    if( next instanceof PDFOperator )
                    {
                        PDFOperator op = (PDFOperator)next;
                        if( op.getOperation().equals( "Tj" ) )
                        {
                            COSString previous = (COSString)tokens.get(
j-1 );
                            String string = previous.getString();
                            string = string.replaceFirst( strToFind,
message );
                            previous.reset();
                            previous.append( string.getBytes() );
                        }
                        else if( op.getOperation().equals( "TJ" ) )
                        {
                            COSArray previous = (COSArray)tokens.get(
j-1 );
                            for( int k=0; k<previous.size(); k++ )
                            {
                                Object arrElement = previous.getObject(
k );
                                if( arrElement instanceof COSString )
                                {
                                    COSString cosString =
(COSString)arrElement;
                                    String string =
cosString.getString();
                                    string = string.replaceFirst(
strToFind, message );
                                    cosString.reset();
                                    cosString.append( string.getBytes()
);                                    
                                }
                            }
                        }
                    }
                }

                PDStream updatedStream = new PDStream(doc);
                OutputStream out = updatedStream.createOutputStream();
                ContentStreamWriter tokenWriter = new
ContentStreamWriter(out);
                tokenWriter.writeTokens( tokens );
                page.setContents( updatedStream );
            }
            doc.save( outputFile );
        }
        finally
        {
            if( doc != null )
            {
                doc.close();
            }
        }
    }
  
    public static void main(String[] args)
    {
        ReplaceString app = new ReplaceString();
        try
        {
            if( args.length != 4 )
            {
                app.usage();
            }
            else
            {
                app.doIt( args[0], args[1], args[2], args[3] );
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    private void usage()
    {
        System.err.println( "usage: " + this.getClass().getName() + 
            " <input-file> <output-file> <search-string> <Message>" );
    }
}
Thanks,

Phil

Reply via email to