PDFBox: PDJpeg рисуется неправильными цветами при изменении размера - > Adobe Reader - > Windows XP & 7
При создании PDF с помощью PDFBox и рисовании PDJpegs к нему цвета изображений изменяются / инвертируются при изменении размера PDJpeg(ов) перед их рисованием в PDF. Эта проблема видна только в Windows XP и Windows 7 с помощью, например, Adobe Reader. Предварительный просмотр на Mac или новая сборка предварительного просмотра PDF в Windows 8 каким-то образом не затрагиваются этим.
Примеры:
Скриншот PDF в Adobe Reader
тот же PDF в Mac Preview
Вот что я хочу сказать. сделайте в коде:
- Создать PDDocument
- создать хэш-карту PDJpegs (для кэширования):
- создайте PDJpegs с помощью BufferedImage, инициализированного через ImageIO.read ()
- измените размер PDJpegs, вызвав setHeight() и setWidth() на PDJpegs
- добавление PDJpeg в HashMap
- создайте PDPage и добавьте его в PDDocument
- Создать PDPageContentStream
- нарисуйте несколько PDJpegs на странице PDPage
- закрыть PDPageContentStream
- Сохранить PDDocument
- Закрыть PDDocument
Метод изменения размера PDJpegs:
private void preparePDFIconCache(List<AbstractDataItem> list) throws IOException {
iconCache = new HashMap<String, PDJpeg>();
for (AbstractDataItem item : list) {
String iconResourcePath = "/com/graphics/icons/" + item.getIconName();
URL iconURL = this.getClass().getResource(iconResourcePath);
BufferedImage icon = null;
if (iconURL != null) {
icon = ImageIO.read(iconURL);
} else {
String myIconResourcePath = SettingsDataModel.getInstance().getMyIconsPath() + File.separator + item.getIconName();
File iconFile = new File(myIconResourcePath);
if (iconFile.exists()) {
URL myIconURL = iconFile.toURI().toURL();
if (myIconURL != null) {
icon = ImageIO.read(myIconURL);
}
}
}
if (icon != null) {
PDJpeg pdfIcon = new PDJpeg(currentDocument, icon);
pdfIcon.setHeight(iconWidthXHeight);
pdfIcon.setWidth(iconWidthXHeight);
iconCache.put(item.getIconName(), pdfIcon);
}
}
}
Если размер буферных изображений изменяется до инициализации PDJpegs, все работает нормально, но они не выглядят такими четкими.
Есть ли у кого-нибудь хорошее решение или испытал ту же проблему?