\n è un carattere particolare che significa "carriage return", ovvero "ritorno carrello".
Alla stampante (ed in generale a tutto il monto Windows) questo non è sufficiente. Un "a capo" su Windows e su tutti i dispositivi di stampa si effettua con l'accoppiata "carriage return" + "line feed" (ovvero, "ritorno carrello" + "avanzamento linea"). L'avanzamento linea significa, appunto, vai alla riga successiva.

L'accoppiata, quindi, è data dai caratteri \n\r (0x0d + 0x0a).

Il discorso della portabilità in questo caso ha poco senso: se l'output devi farlo su file, non usare le sequenze di caratteri, ma usa l'apposita variabile di sistema per ottenere la stringa corretta come separatore di riga:

codice:
String lineSeparator = System.getProperty("line.separator");

// Ovunque voglio andare a capo, aggiunto "lineSeparator" alla fine della riga
Per quanto concerne la stampa, il problema non è la portabilità, ma la comunicazione con il driver della stampante.

In ogni caso, la stampa verso un file è diversa dalla stampa a video, che è diversa dalla stampa su dispositivo (stampante).


Ciao.