Я конвертирую изображение в PDF-документ с помощью iText. У меня возникают проблемы, когда я придаю изображению нестандартный размер, который больше, чем сам документ.
Перед тем, как сделать doc.open()
, я устанавливаю поля следующим образом doc.setMargins(marginLeft, marginRight, marginTop, marginBottom);
Когда я используйте мой fit
метод, он работает как шарм:
// scale
scaledAwtImage = new BufferedImage(scaledWidth, scaledHeight, bufferedImageType);
// instantiate
image = instantiateImage(awtImage, scaledAwtImage, scaledWidth, scaledHeight);
setAutoRotate(image);
// scaleWithMargins
float targetWidth = doc.getPageSize().getWidth() - mmToUnit(Float.parseFloat(marginLeft) + Float.parseFloat(marginRight));
float targetHeight = doc.getPageSize().getHeight() - mmToUnit(Float.parseFloat(marginBottom) + Float.parseFloat(marginTop));
image.scaleToFit(targetWidth, targetHeight);
Возможно из-за image.scaleToFit()
. Вот код, с которым у меня проблемы. Как видите, правое поле будет перезаписано изображением. Я не могу использовать image.scaleToFit()
здесь, потому что я хочу сохранить нестандартные размеры. Кто-нибудь есть идея?
// printWidth
if(printWidth != null && !printWidth.isEmpty() ){
scaledWidth = (int) mmToUnit(printWidth);
}
// printHeight
if(printHeight != null && !printHeight.isEmpty() ){
scaledHeight = (int) mmToUnit(printHeight);
}
scaledAwtImage = new BufferedImage(scaledWidth, scaledHeight, bufferedImageType);
//instantiate
image = instantiateImage(awtImage,scaledAwtImage, scaledWidth, scaledHeight);
РЕДАКТИРОВАТЬ
Забыли опубликовать мой instantiateImage()
метод для получения дополнительной информации.
private Image instantiateImage(BufferedImage awtImage, BufferedImage scaledAwtImage, int scaledWidth, int scaledHeight) throws IOException, BadElementException {
Graphics2D g = scaledAwtImage.createGraphics();
g.drawImage(awtImage, 0, 0, scaledWidth, scaledHeight, null);
g.dispose();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ImageIO.write(scaledAwtImage, "jpeg", bout);
byte[] imageBytes = bout.toByteArray();
Image image = Image.getInstance(imageBytes);
return image;
}