Изменить размеры изображения или удлинить ее по вертикали без потери качества
У меня есть таблица созданая в iText которая выглядит следующим образом.
** Таблицы на обе картинки имеют одинковый размер*
Высота каждой ячейки является динамической(сам задаю) и в сумме должно составлять 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)

