There are two areas that I see could be modified that may provide a performance gain.
The first is probably the easiest. The append to list can bog down when the list size grows. Instead of using appendToDocumentList or appendToStringList use a Hashtable or HashMap or LinkedList or some other collection class. When the loop is complete, then convert the collection to a document list.
The problem with appendTo*List is that it allocates a new array for each iteration and copies all the item references to the new array. This is “busy” work and can also negatively impact memory.
The other area can also be aided by using collection classes. Instead of looping to do the lookups, it might be helpful to put the serviceItemsList and currencyItemsList into collection classes. Perhaps a HashMap using a concatenation of PackNo and LineNo as the key. Loop over lineItems/selectedItems as you do now but then use HashMap.get to retrieve the matching (if any) item. The HashMap lookup should be faster than the loop.