Изменить размеры изображения или удлинить ее по вертикали без потери качества

У меня есть таблица созданая в iText которая выглядит следующим образом.

Штрих-код при нормальной высоте ячейки

Штрих-код при высоте больше чем 60%

** Таблицы на обе картинки имеют одинковый размер*

Высота каждой ячейки является динамической(сам задаю) и в сумме должно составлять 100%. Таким образом, если я установлю значение первой ячейки на 60% от общей высоты ячеек, то я хочу, чтобы штрих-код автоматически удлинялся по вертикали. Я с трудом нахожу, как это сделать в iText, и поэтому ищу, как задавать размеры при генерации. Но в библиотека которая я ипспользую категорически отказывается устанавливать нестандартные размеры. Если я указываю "неправильные" размеры, то один из них(высота или ширина) игнорируется чтобы картика небыла неравномерной.

    public String generateBarcode(final String barcodeText) {
    final var barcode = BarcodeFactory.createCode128(barcodeText);
    final var bufferedImage = BarcodeImageHandler.getImage(barcode);

    final var tempFile = File.createTempFile("barcode", ".png");
    ImageIO.write(bufferedImage, "png", tempFile);
    return tempFile.getAbsolutePath();
}

И вот вопрос, может есть способ удлинить штрих код изображения при генерации или в iText. Было бы отлично если есть что-то чтобы удлинить по вертикали.

Спасибо за ответ Михаилу Реброву и Труфальдино:

final var imageCell = new PdfPCell();
final var barcodeImage = generateBarcode("Text", settings)
final var image = com.itextpdf.text.Image.getInstance(barcodeImage, Color.BLACK, true);
    
imageCell.setImage(image);

***********************************
    
public java.awt.Image generateBarcode(final String barcodeText, final ProductTagSettingsDTO settings) {
final var barcodeHeight = settings.getTagHeight().floatValue() / 100 * settings.getFirstRowHeightPercentage();
    
final var barcode128 = new Barcode128();
barcode128.setCode(barcodeText);
barcode128.setBarHeight(barcodeHeight);
barcode128.setCodeType(Barcode128.CODE128);
return barcode128.createAwtImage(Color.BLACK, Color.WHITE);
}

Ответы (2 шт):

Автор решения: Михаил Ребров

Наверное, можно просто масштабировать данное изображение.
Но тут без потерь качества не обойтись. Правда я не думаю что на штрихкоде это как-то заметно отобразится

Вот вспомогательный метод для масштабирования изображения

BufferedImage resizeImage(BufferedImage originalImage, int targetWidth, int targetHeight) throws IOException {
    Image resultingImage = originalImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_DEFAULT);
    BufferedImage outputImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
    outputImage.getGraphics().drawImage(resultingImage, 0, 0, null);
    return outputImage;
}

И потом уже можно будет по месту указывать какого именно размера должен быть штрихкод

final var bufferedImage = resizeImage(BarcodeImageHandler.getImage(barcode), width, height);

В противном случае можно попробовать сразу генерировать изображение в нужном размере. Но для этого нужно знать возможно ли это в принципе. Для чего в свою очередь нужно знать каким именно инструментом для генерации штрихкода ты пользуешься.

→ Ссылка
Автор решения: Труфальдино
try(PdfWriter writer =  new  PdfWriter(OUTPUT_FILE);
                   PdfDocument pdfD = new PdfDocument(writer);
                   Document doc = new Document(pdfD))
                   {
      doc.add(new Paragraph( "Test Barcode"));
      Barcode128 code128 = new Barcode128(pdfD);
      code128.setGenerateChecksum(true);
      code128.setCode("Truffaldino  from  bergamo" + " code128.setBarHeight(128)" );
      code128.setCodeType(Barcode128.CODE128);
      code128.setBarHeight(128);
      PdfFormXObject xObject =  code128.createFormXObject(ColorConstants.RED, ColorConstants.BLACK,pdfD);
      doc.add( new Image(xObject)); 

введите сюда описание изображения используя метод setBarHeight можно меть размер barcodes (мы говорим о 128)

→ Ссылка