You can open a sign to a player using the play_server_open_sign_editor packet. All you have to do is set the location pinfo to something random, like his location:
code_language.skript:
set location pinfo 0 of {_packet} to player's location
And send the packet to the player.
Once the player is done writing, they will send a play_client_update_sign packet, containing the lines they wrote in the string array pinfo:
code_language.skript:
string array pinfo 0 of event-packet
You can loop that, print it straight, do whatever, etc. with it.