2013-08-07 37 views
1

我試圖打印與我在小程序GUI中相同的內容。打印小程序GUI

當我打印它時,它不完全相同......每個組件的大小以不成比例的方式變化。

的GUI:

enter image description here

印刷:

enter image description here

的利潤都沒有問題,我可以很容易地解決這些問題......但正如你所看到的條形碼和垂直文本的大小不合適。

主要類:

public class Impresion extends Applet{ 
     PrinterJob job = PrinterJob.getPrinterJob(); 
     Panel test; 
     Label test2; 
     Label test3; 
     String copyParam = null; 
     String dialogParam = null; 
     String codeParam = null; 
     String descParam = null; 
     public void init(){ 
      copyParam = this.getParameter("copias"); 
      dialogParam = this.getParameter("ventanita"); 
      codeParam = this.getParameter("codigo"); 
      descParam = this.getParameter("descripcion"); 
      copyParam = "1"; 
      dialogParam = "1"; 
      codeParam = "002/113"; 
      descParam = "asd"; 

      if (copyParam == null || dialogParam == null || codeParam == null || descParam == null){ 
       System.out.println("Faltan parametros. - "+copyParam+" - "+dialogParam+" - "+codeParam+" - "+descParam); 
      } else { 
       job.setPrintable(new Dibujar(codeParam, descParam)); 
       PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
       float leftMargin = (float) 0.1; 
       float topMargin = (float) 0.1; 
       float rightMargin = (float) 0.1; 
       float bottomMargin = (float) 0.1; 
       float mediaWidth = (float) 60.0; 
       float mediaHeight = (float) 50.0; 
       aset.add(new MediaPrintableArea(leftMargin, topMargin, (mediaWidth - leftMargin - rightMargin), (mediaHeight - topMargin - bottomMargin), Size2DSyntax.MM)); 
       int copias = Integer.parseInt(copyParam); 
       aset.add(new Copies(copias)); 
       boolean imprimir = true; 
       if (dialogParam.indexOf('1') != -1){ 
        imprimir = job.printDialog(aset); 
       } 
       if (imprimir){ 
        try { 
         job.print(aset); 
        } catch (PrinterException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 
    } 

打印類:

public class Dibujar implements Printable{ 
     String codeParam = null; 
     String descParam = null; 
     public Dibujar(String code, String desc) { 
      codeParam = code; 
      descParam = desc; 
     } 

     public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException{ 
      if (pageIndex > 0){ 
       return NO_SUCH_PAGE; 
      } 
      Barcode b = null; 
      try { 
       b = BarcodeFactory.createCodabar(codeParam); 
       b.setDrawingText(false); 
       b.setBarWidth(1); 
       b.draw((Graphics2D) g, 30, 8); 
      } catch (BarcodeException | OutputException e1) { 
       e1.printStackTrace(); 
      } 
      g.setFont(new Font("Arial", Font.BOLD, 9)); 
      String description = descParam; 
      g.drawString(description, 16, 70); 
      AffineTransform at = AffineTransform.getRotateInstance(Math.toRadians(90),16,8); 
      Graphics2D g2 = (Graphics2D) g; 
      g2.transform(at); 
      g.setFont(new Font("Arial", Font.BOLD, 14)); 
      g2.drawString(codeParam.replace("/", ""),16,8); 
      g2.transform(new AffineTransform()); 
      return PAGE_EXISTS; 
     } 
    } 
+0

它可能是你使用的參數「b.draw((Graphics2D)g,30,8);」和「g2.drawString(codeParam.replace(」/「,」「),16,8);」?你有沒有嘗試調整這些? –

+0

或者可能調整:「aset.add(new MediaPrintableArea(leftMargin,topMargin,(mediaWidth - leftMargin - rightMargin),(mediaHeight - topMargin - bottomMargin),Size2DSyntax.MM));」 ? –

+0

你是對的,謝謝 –

回答

0

調整參數在此:

aset.add(new MediaPrintableArea(leftMargin, topMargin, (mediaWidth - leftMargin - rightMargin), (mediaHeight - topMargin - bottomMargin), Size2DSyntax.MM)); 

或者在這兩個調整參數:

b.draw((Graphics2D) g, 30, 8); 
//.... 
g2.drawString(codeParam.replace("/", ""),16,8);