Search code examples
loopsfor-loopaspose.pdf

How to loop TextFragment in Aspose.PDF


In a process of writing text to PDF, I'm using TextFragment for setting properties of various fields. Instead of setting for each field separately, how do make use of a loop?

My present code:

TextFragment a = new TextFragment("Hi!");
        tf.setPosition(dropDown);
        tf.getTextState().setFont(new FontRepository().findFont("Arial"));
        tf.getTextState().setFontSize(10.0F);
            .
            .
            .
    TextFragment n = new TextFragment("n");
            tf.setPosition(dropDown);
            tf.getTextState().setFont(new FontRepository().findFont("Arial"));
            tf.getTextState().setFontSize(10.0F);

I need something like this:

some loop {
.
.
TextFragment txtFrag = new TextFragment(A);
        tf.setPosition(dropDown);
        tf.getTextState().setFont(new FontRepository().findFont("Arial"));
        tf.getTextState().setFontSize(10.0F);

} //This should set properties for all fields

The string in TextFragment("String") is not same for all the fields. It's different for various form fields.


Solution

  • You may simply add text fragments in your PDF file and once you finish adding text, you may get or set different properties for all the text fragments in a PDF file by using the code below:

    // Load document
    Document document = new Document( dataDir + "input.pdf");
    
    // Create TextAbsorber object to extract all textFragments
    TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber();
    
    // Accept the absorber for first page of document
    document.getPages().accept(textFragmentAbsorber);
    
    // Get the extracted text fragments into collection
    TextFragmentCollection textFragmentCollection = textFragmentAbsorber.getTextFragments();
    
    // Loop through the Text fragments
    for (TextFragment textFragment : (Iterable<TextFragment>) textFragmentCollection) {
        // Iterate through text fragments
        System.out.println("Text :- " + textFragment.getText());
        textFragment.getTextState().setFont(new FontRepository().findFont("Arial"));
        textFragment.getTextState().setFontSize(10.0F);
        System.out.println("Position :- " + textFragment.getPosition());
        System.out.println("XIndent :- " + textFragment.getPosition().getXIndent());
        System.out.println("YIndent :- " + textFragment.getPosition().getYIndent());
        System.out.println("Font - Name :- " + textFragment.getTextState().getFont().getFontName());
    }
    
    // Save generated document
    document.save(dataDir + "input_17.12.pdf");
    

    You may visit Working with Text for more information on this. I hope this will be helpful. Please let us know if you need any further assistance.

    I work with Aspose as Developer Evangelist.