1

アプレット GUI にあるものと同じものを印刷しようとしています。

印刷するとまったく同じではないということです...各コンポーネントのサイズが不均衡に変化します。

GUI:

ここに画像の説明を入力

印刷:

ここに画像の説明を入力

マージンは問題ありません。簡単に修正できます...しかし、ご覧のとおり、バーコードと縦書きテキストのサイズが適切ではありません。

メインクラス:

    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;
        }
    }
4

1 に答える 1