Изображение, напечатанное с помощью Java.awt.графики, размыто?

#java #printing #graphics

Вопрос:

Я пытаюсь использовать java.awt.Графику, которая появляется в результате внедрения печатаемой

и печать логотипа на этикетке

Когда я пытаюсь сохранить его в файл, кажется, что он просто отлично сохраняется в файл

когда я печатаю на этикетке, она неровная или что-то в этом роде

Я пытаюсь показать только соответствующий код в этой вставке

Я перепробовал так много подходов

Я попытался установить dpi

Я попытался изменить качество печати

Я прочитал документацию по нескольким классам, интерфейсам … и т. Д

 public class LabelPrinterTest implements Printable {

private Image customerLogo;


@Override
public int print(Graphics g, PageFormat pf, int page) throws
        PrinterException {

    Graphics2D g2d = (Graphics2D) g;

    Map <Key, Object> hints = new HashMap<Key, Object>();
      hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      
      hints.put(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);

      hints.put(RenderingHints.KEY_RENDERING,
            RenderingHints.VALUE_RENDER_QUALITY);
      g2d.setRenderingHints(hints);

  //   here is where i create the db connection so this is removed

           
    Image customerLogo;
    java.awt.image.BufferedImage  bufferedCustomerLogo;
    
    try {

        Class.forName("com.mysql.cj.jdbc.Driver").newInstance();

        con = DriverManager.getConnection(connectionString, user, pass);

        
        Statement statement = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        ResultSet rs = statement.executeQuery("SELECT CustomerLogo FROM specifictable.customerlogo order by Id desc limit 1;");

        rs.first();

        byte [ ] imageDataAsByteArray = new byte[rs.getBinaryStream(1).available()];

        rs.getBinaryStream(1).read(imageDataAsByteArray);

        BufferedImage tBim = new BufferedImage(66, 36, BufferedImage.TRANSLUCENT);
        // comes out as a buffered image which is a subclass of bufferedimage
        customerLogo = ImageIO.read(
                  new ByteArrayInputStream(imageDataAsByteArray))
                     .getScaledInstance(-1,
                                        25,
                                        Image.SCALE_SMOOTH); // resampling int ?????

        g2d.drawImage( customerLogo, 160, yPosition - 30, null);
    }
    catch(Exception ex) {
    }

    g2d.dispose();
    
    return PAGE_EXISTS;
}


public void _print(
) {
    PrinterJob job = PrinterJob.getPrinterJob();

    PageFormat pageFormat = job.defaultPage();

    pageFormat.setOrientation(PageFormat.LANDSCAPE);
    Paper paper = pageFormat.getPaper();
    
    paper.setImageableArea(-10, -10, paper.getWidth(), paper.getHeight());

    pageFormat.setPaper(paper);
    
    job.setPrintable(this, pageFormat);
    
    PrintService [] printers = job.lookupPrintServices();
    

   try {        
           job.setPrintService(printers[1]);
       }
     catch(Exception ex) {

      }
        try {                
            
            HashPrintRequestAttributeSet set = new HashPrintRequestAttributeSet();
            set.add(new PrinterResolution(72, 72, PrinterResolution.DPI));
            set.add(PrintQuality.HIGH);
            job.setJobName("test label");
            job.print(set);
            
           
        } catch (PrinterException ex) {

        }
}
 

Это изображение в файле, которое он создает, когда я записываю в файл

Вот как это печатается