I suggest you take a look at the Virtual List technique, developed by Bruce Robertson. Here are a few links:
That would work fine if there was some consistent length to the content of the field data which I could get if i wanted to make it not much fun for the users by having multiple text comment fields for one record with a limitation on the number of characters in any one of them. I guess that would solve another "missing comment" sporadic problem where a user will put in a comment but as they are typing it, the client loses its connection and the comment disappears since it never made it to the server. As it stands though, one paragraph could be three pages long if that is the way they typed it in.
So, I can't count Carriage returns either, and I can't count words since they can be all sorts of lengths, and I can't really count characters since that could be kind of screwy with the breaking of words in unnatural places.
I guess I could accumulate all the comments from the different records into a global and then break that global to multiple globals based on the character count (how many can show on a page) and then use sliding to keep the number of pages printing to a minimum. Since it would only have a value in the next page variable if the last one had enough characters, but that would still get screwed up if there were a bunch of carriage returns.
Your last paragraph is more or less on the right track. Parse your field into multiple chunks based on either how many characters will fit, the end of the text, or the presence of a carriage return (whichever comes first). Then apply a carriage return at the end of each one, followed by the Virtual List. This should solve the issue.