1

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.

intruder
  • 417
  • 1
  • 3
  • 18

1 Answers1

1

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.

Farhan Raza
  • 392
  • 1
  • 8
  • This works fine for all fields together. What if I want to add only for certain fields at various locations of the PDF? – intruder Jan 23 '18 at 14:40
  • There are various ways to search and retrieve the text fragments from a PDF document. You can use text phrases and regular expressions. The constructor of TextFragmentAbsorber class allows to pass the regular expression or the text phrase. // Create TextAbsorber object to find all instances of the input search phrase TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("\\d{4}-\\d{4}"); // like 1999-2000' – Imran Rafique Jan 28 '18 at 17:12