PDFBox を使用して PDF を作成し、そこに PDJpeg を描画すると、PDF に描画する前に PDJpeg のサイズを変更すると、画像の色が変更または反転されます。この問題は、Adobe Reader などを使用する Windows XP および Windows 7 でのみ発生します。Mac のプレビューまたは Windows 8 の新しい PDF プレビュー ビルドは、この影響を受けません。
サンプル:
Adobe Reader でのスクリーンショット PDF
Mac プレビューでの同じ PDF
これは私がコードで行うことです:
- PDDocument の作成
- PDJpegs の HashMap を作成します (キャッシュ用):
- ImageIO.read() で初期化された BufferedImage で PDJpeg を作成します。
- PDJpegs で setHeight() と setWidth() を呼び出して、PDJpegs のサイズを変更します。
- PDJpeg を HashMap に追加する
- PDPage を作成し、PDDocument に追加します
- PDPageContentStream を作成する
- PDPage にいくつかの PDJpeg を描画します
- 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 を初期化する前に BufferedImages のサイズを変更すると、すべて正常に動作しますが、鮮明に見えません。
誰かが良い解決策を持っているか、同じ問題を経験していますか?