Imprimer le reçu en Java avec une certaine taille de police


J'ai essayé d'imprimer le reçu de point de vente avec le code que j'ai obtenu de ici. Cela fonctionne bien mais je veux avoir différentes tailles de police dans le reçu. Après avoir cherché dans le forum, je viens de découvrir qu'un JTextArea ne peut avoir que 1 police. Alors, Comment peut-il être fait? Je suis nouveau en Java, donc je préfère une solution simple pour cela, merci.

public class NewClass {

public void a() {
    PageFormat format = new PageFormat();
    Paper paper = new Paper();

    double paperWidth = 3;//3.25
    double paperHeight = 3.69;//11.69
    double leftMargin = 0.12;
    double rightMargin = 0.10;
    double topMargin = 0;
    double bottomMargin = 0.01;

    paper.setSize(paperWidth * 200, paperHeight * 200);
    paper.setImageableArea(leftMargin * 200, topMargin * 200,
            (paperWidth - leftMargin - rightMargin) * 200,
            (paperHeight - topMargin - bottomMargin) * 200);

    format.setPaper(paper);

    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
    aset.add(OrientationRequested.PORTRAIT);


    PrinterJob printerJob = PrinterJob.getPrinterJob();
    Printable printable = new ReceiptPrint();

    format = printerJob.validatePage(format);
    boolean don = printerJob.printDialog();
    printerJob.setPrintable(printable, format);
    try {
        printerJob.print(aset);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

class ReceiptPrint implements Printable {

SimpleDateFormat df = new SimpleDateFormat();
String receiptDetailLine;
public static final String pspace = "               ";//15-spaces

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
        throws PrinterException {

    df.applyPattern("dd/MM/yyyy HH:mm:ss");
    String strText = null;
    final String LF = "\n";// text string to output
    int lineStart;           // start index of line in textarea
    int lineEnd;             // end index of line in textarea
    int lineNumber;
    int lineCount;
    final String SPACE = "          ";//10 spaces
    final String SPACES = "         ";//9
    final String uline = "________________________________________";
    final String dline = "----------------------------------------";
    String greetings = "THANKS FOR YOUR VISIT";
    receiptDetailLine = "asdasdasda";

    Graphics2D g2d = (Graphics2D) graphics;
    Font font = new Font("MONOSPACED", Font.BOLD, 9);

    if (pageIndex < 0 || pageIndex >= 1) {
        return Printable.NO_SUCH_PAGE;
    }
    JTextArea textarea = new JTextArea(10, 40);


    textarea.append(SPACES + "sadasdsad" + "\n");

    textarea.append(" " + SPACES + "sadasdsad" + "\n");

    textarea.append(SPACES + "sadasdsad" + "\n");

    textarea.append("" + SPACES + "sadasdsad" + "\n");

    textarea.append(SPACES + "sadasdsad" + "\n");

    textarea.append(uline + "\n");
    textarea.append("Order Ref:" + "   " + receiptDetailLine + "\n");
    textarea.append(dline + "\n");
    textarea.append(" Qty     Description" + SPACES + "  Price" + LF);
    textarea.append(dline + "\n");

    System.out.println(2);

    String printedLine = "       Service Charge Complimentary";
    textarea.append(printedLine + LF);

    textarea.append(LF + SPACES + "   Your Reciept\n" + SPACE + greetings + LF);
    textarea.append(df.format(new Date()) + LF);
    textarea.setEditable(false);

    g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

    g2d.setFont(font);
    lineNumber = 0;
    lineCount = textarea.getLineCount();
    strText = textarea.getText();
    /*MediaTracker mt = new MediaTracker(textarea);
     URL imageURL = null;
     try {

     imageURL = new URL(mainDirectory+"quindell.png");
     } catch (MalformedURLException me) {
     me.printStackTrace();
     }

     //--- Load the image and wait for it to load
     Image image = Toolkit.getDefaultToolkit().getImage(imageURL);
     mt.addImage(image, 0);
     */

    while (lineCount != 0) {
        try {

            lineStart = textarea.getLineStartOffset(lineNumber);
            lineEnd = textarea.getLineEndOffset(lineNumber);
            strText = textarea.getText(lineStart, lineEnd - lineStart);
        } catch (Exception exception) {
            System.out.println("Printing error:" + exception);                  // have to catch BadLocationException
        }

        g2d.drawString(strText, 1, (lineNumber + 1) * 18);
        //spacing    between lines
        lineNumber = lineNumber + 1;
        lineCount--;
    }
    return Printable.PAGE_EXISTS;
}
}
Author: Community, 2015-07-28

1 answers

Ça marche pour moi. Espérons que cela vous aidera..

Tout d'abord, le texte de JTextArea est imprimé de N à 0.

Vous pouvez spécifier la condition en fonction du numéro de ligne pour changer la police comme ci-dessous.

    while (lineCount != 0) {
        try {
            lineStart = textarea.getLineStartOffset(lineNumber);
            lineEnd = textarea.getLineEndOffset(lineNumber);
            strText = textarea.getText(lineStart, lineEnd - lineStart);
            System.out.println("To be Print is : " + strText + " :" + lineCount);
        } catch (Exception ex) {
            loger.error(ex);
        }
        **if(lineNumber==3) {
            g2d.setFont(new Font("MONOSPACED", Font.ITALIC, 13));
        }**
        g2d.drawString(strText, 1, (lineNumber + 1) * 18);
        lineNumber = lineNumber + 1;
        lineCount--;
    }

Où condition lineNumber==3 change la police. Vous pouvez définir l'ancienne police dans une autre partie.

 0
Author: Hemant_R_D, 2015-12-10 09:07:34