Например, размер кнопки: ширина: 100, высота: 20, а ширина изображения: 40, высота: 20, но после сохранения PDF-файла и открытия его в Adobe Reader у меня есть размер изображения, равный размеру кнопки с шириной: 100 и высотой: 20.
Первоначальное поле кнопки выглядит как

, но после сохранения PDF-файла это изображение выглядит как

Мой код для создания кнопки выбора файлов выглядит следующим образом:
Код: Выделить всё
pdButton = new PDPushButton(acroForm);
pdButton.setPartialName(field.name);
if (field.required) {
pdButton.setRequired(true);
}
acroForm.getFields().add(pdButton);
PDAnnotationWidget widget = new PDAnnotationWidget();
PDRectangle rect = pdfHandler.getPDRectangle(fieldRectangle);
widget.setRectangle(rect);
PDAppearanceDictionary appearance = new PDAppearanceDictionary();
final PDResources defaultResources = acroForm.getDefaultResources();
final PDAppearanceCharacteristicsDictionary appearanceCharacteristicForImage = createAppearanceCharacteristicForImage(pdf,
widget,
page,
defaultResources);
widget.setAppearanceCharacteristics(appearanceCharacteristicForImage);
widget.setAppearance(appearance);
PDActionJavaScript javascriptAction = new PDActionJavaScript("event.target.buttonImportIcon();");
widget.setAction(javascriptAction);
widget.setPage(page);
Код: Выделить всё
PDImageXObject pdImage = PDImageXObject.createFromByteArray(defaultPdfHandler.getDoc(),
MainUtils.getImageBytes(((ImageBlock) contentBlock).bufferedImage, "png"),contentBlock.name);
private void setImage(COSDictionary mk,
List
widgets,
int i,
DefaultPdfHandler defaultPdfHandler,
PDImageXObject pdImage,
COSDictionary appearance,
COSDictionary kid
) throws IOException {
if (mk != null) {
mk.removeItem(COSName.BG);
PDAppearanceCharacteristicsDictionary appearanceCharacteristicsDictionary = new PDAppearanceCharacteristicsDictionary(mk);
final PDAnnotationWidget widget = widgets.get(i);
final PDRectangle rectangle = widget.getRectangle();
PDAppearanceStream nkStream = new PDAppearanceStream(defaultPdfHandler.getDoc());
final MainUtils.ScaledImage scaledImage = MainUtils.scaleImage(
pdImage.getWidth(),
pdImage.getHeight(),
rectangle.getWidth(),
rectangle.getHeight()
);
pdImage.setWidth((int) scaledImage.width());
pdImage.setHeight((int) scaledImage.height());
nkStream.setResources(new PDResources());
nkStream.setBBox(new PDRectangle(scaledImage.width(), scaledImage.height()));
try (PDAppearanceContentStream contentStream = new PDAppearanceContentStream(nkStream)) {
contentStream.drawImage(pdImage, 0f, 0f, scaledImage.width(), scaledImage.height());
}
appearanceCharacteristicsDictionary.getCOSObject().setItem(COSName.I, nkStream);
appearanceCharacteristicsDictionary.getCOSObject().setNeedToBeUpdated(true);
appearance.setItem(COSName.N, nkStream);
appearance.setNeedToBeUpdated(true);
kid.setItem(COSName.MK, appearanceCharacteristicsDictionary);
kid.setNeedToBeUpdated(true);
}
}

.
Может ли кто-нибудь помочь мне настроить изображение в качестве фона для кнопки произвольного размера (фоновое изображение не обязательно должно занимать всю область кнопки)?
Подробнее здесь: https://stackoverflow.com/questions/782 ... in-the-pdf