Посмотрите пример BarcodePlacement. Здесь мы создаем три штрихкода PDF417:
Image img = createBarcode(1, 1, pdfDoc);
doc.add(new Paragraph(String.format("This barcode measures %s by %s user units",
img.getImageScaledWidth(), img.getImageScaledHeight())));
doc.add(img);
img = createBarcode(3, 3, pdfDoc);
doc.add(new Paragraph(String.format("This barcode measures %s by %s user units",
img.getImageScaledWidth(), img.getImageScaledHeight())));
doc.add(img);
img = createBarcode(3, 1, pdfDoc);
doc.add(new Paragraph(String.format("This barcode measures %s by %s user units",
img.getImageScaledWidth(), img.getImageScaledHeight())));
doc.add(img);
Результат выглядит следующим образом:
Штрихкоды
Так выглядит один из штрихкодов внутри:
Векторные данные
Я добавляю вид изнутри, чтобы показать, что двухмерный штрихкод не добавляется как растровое изображение (как в вашем примере). Это векторное изображение, состоящее из группы маленьких прямоугольников. Вы можете проверить это самостоятельно в файле
barcode_placement.pdf
Объект
Image
не должен вас запутать. Если вы посмотрите на метод
createBarcode(),
то увидите, что
Image
в действительности является векторным изображением:
public Image createBarcode(float mw, float mh, PdfDocument pdfDoc) {
BarcodePDF417 barcode = new BarcodePDF417();
barcode.setCode("BarcodePDF417 barcode");
return new Image(barcode.createFormXObject(Color.BLACK, pdfDoc)).scale(mw, mh);
}
Высота и ширина, которые передаются через метод
scale()
, определяют высоту и ширину маленьких прямоугольников. Во внутренней части штрихкода, можно увидеть следующее:
0 21 3 1 re
Это прямоугольник, у которого x = 0, y = 21, ширина — 3, а высота —1.
Когда вы запрашиваете размер штрихкода, то получаете число необходимых прямоугольников. Размеры штрихкода будут рассчитываться следующим образом:
Rectangle size = barcode.getBarcodeSize();
float width = mw * size.getWidth();
float height = mh * size.getHeight();
Вы допускаете, что значение size (размер в единицах пользователя) верно, только если
mw
и
mh
равняются
1
.
Я использую значения для создания примера
PdfFormXObject
и переношу его в
Image
. Затем я могу добавить
Image
к документу, как и любое другое изображение. Основное отличие этого изображения от обычных заключается в том, что оно векторное.