3

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 のサイズを変更すると、すべて正常に動作しますが、鮮明に見えません。

誰かが良い解決策を持っているか、同じ問題を経験していますか?

4

1 に答える 1