Как настроить фоновое изображение для кнопки изображения в PDF-файлеJAVA

Программисты JAVA общаются здесь
Anonymous
Как настроить фоновое изображение для кнопки изображения в PDF-файле

Сообщение Anonymous »

Мне нужно создать кнопку выбора файла в PDF-документе и добавить к этой кнопке фоновое изображение, но я не хочу изменять размер фонового изображения на всей кнопке. Мне нужно масштабировать фоновое изображение, но я не могу изменить размер кнопки.
Например, размер кнопки: ширина: 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

Вернуться в «JAVA»