You have somewhat answered your own question: the FM* objects are XForms. This is an instance of the XObjects, which you get when going through the page resources. Each XForm has a content stream, which you can then alter similarly to what you did with the page content stream.

Btw the XForms can again have resources, these can again have XForms...

(This is what I wrote for you in PDFBOX-2754. However I don't see that you try to go through the resources to identify any XForms?!)

Tilman


Am 13.04.2015 um 08:16 schrieb Mohit Srivastava:
Hi,

We are trying to remove the PDF page text content using the Token having
"TJ" and "Tj" and able to do so for most of the text, but there are few
  tokens which contains nested text which is not removed.While investigation
we have observed that the text which is not removed  relates to the
PDFOperator{do} preceeded by COSName{FM*} shows such problem.


Please provide help on the same. Below is the code used:

code:

PDDocument document = null;
                   try
                   {
                       document = PDDocument.load("D:\\\BiologyShort.pdf");
                       if( document.isEncrypted() )
                       {
                           System.err.println( "Error: Encrypted documents
are not supported for this example." );
                           System.exit( 1 );
                       }
                       List allPages =
document.getDocumentCatalog().getAllPages();
                       for( int i=0; i<allPages.size(); i++ )
                       {
                           PDPage page = (PDPage)allPages.get( i );
                           PDFStreamParser parser = new
PDFStreamParser(page.getContents());
                           parser.parse();

                           List tokens = parser.getTokens();


                           List newTokens = new ArrayList();
                           for( int j=0; j<tokens.size(); j++)
                           {
                               Object token = tokens.get( j );

                               if( token instanceof PDFOperator )
                               {
                                   PDFOperator op = (PDFOperator)token;
                                   if( op.getOperation().equals( "Tj" ) ||
op.getOperation().equals( "TJ" ))
                                   {
                                       //remove the one argument to this
operator
                                       newTokens.remove( newTokens.size() -1
);
                                       continue;
                                   }
                               }

                               newTokens.add( token );

                           }
                           PDStream newContents = new PDStream( document );
                           ContentStreamWriter writer = new
ContentStreamWriter( newContents.createOutputStream() );
                           writer.writeTokens( newTokens );
                           newContents.addCompression();
                           page.setContents( newContents );
                       }
                           document.save("D:\\BiologyShortNew.pdf" );
                  }
                  catch(Exception e){
                  }
                  finally
                  {
                      if( document != null )
                      {
                          document.close();
                      }
                  }

regards,
Mohit



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to