2010-05-17 5 views
0

J'ai un texte plus long enregistré dans une chaîne. Je voudrais imprimer le texte en deux colonnes sur une seule page. Comment puis-je faire cela en utilisant Java Swing?Comment imprimer un texte sur deux colonnes à l'aide de Java Swing?

Je ne comprends pas comment je peux emballer le texte quand il est temps d'utiliser une nouvelle ligne. J'ai lu Lesson: Printing dans le tutoriel Java, mais je n'ai pas trouvé de méthodes utiles pour travailler avec du texte ou des chaînes à l'exception de FontMetrics.

Y at-il de bonnes méthodes dans l'API Java pour cela ou y at-il une bonne bibliothèque que je peux utiliser pour cela?

+0

juste pour clarifier, vous voulez dire physiquement imprimer, pas imprimer sur l'écran? – aioobe

+0

@aioobe: je veux dire physiquement imprimer avec une imprimante. – Jonas

Répondre

1

Vous utiliserez probablement la classe java.awt.print.PrinterJob pour mettre en place le travail d'impression et graphiques sur render l'imprimante en utilisant la méthode java.awt.font.TextLayout().

Vous devrez diviser le fichier java.awt.print.PageFormat que vous obtenez de l'imprimante pour diviser la sortie en deux colonnes.

Voici un print example utilisant toute la page.

Vous devez gérer vous-même l'enchaînement de chaînes. Regardez la méthode print() dans l'exemple d'impression. Vous verrez les classes Java dont vous avez besoin pour emballer le texte.

+0

Ajout d'une explication d'emballage à ma réponse. –

+0

Merci, votre lien était utile. – Jonas

0

Problème intéressant, il pourrait y avoir une méthode sophistiquée utilisant l'interface Document; mais fondamentalement créer deux côte à côte JTextPanes(). Vous pourriez passer beaucoup de temps à essayer de mesurer automatiquement le texte afin qu'il se scinde en deux, mais je voudrais juste essayer de trouver une limite de paragraphe au milieu qui équilibre à peu près le nombre de caractères non-espaces. Si le texte est déjà structuré, vous pouvez consulter le document

int findSplitBoundary(String x) { 
int midPoint = x.length()/2; 
for (int i = 0; i < Math.min(x.length()/2 - 2, 100); i++) { 
    if (x.startsWith(".\n", midPoint - i)) return midPoint- i; 
    if (x.startsWith(".\n", midPoint + i)) return midPoint- i; 
} 
return midPoint; 
} 

Ensuite, ajoutez votre texte aux volets en tant que tels:

JTextPane column1 = new JTextPane(); 
JTextPane column2 = new JTextPane(); 
split=findSplitBoundary(longText); 
column1.setText(longText.substring(0, split)); 
column2.setText(longText.substring(split)); 
add(column1, BorderLayout.WEST); 
add(column2, BorderLayout.EAST); 

Aussi, vous trouverez peut-être un peu de chance regardant le HTMLEditorKit, bien que je don Je ne sais pas si le HTML offre le genre de découpage de texte.

column1.setEditorKit(new HTMLEditorKit());