3

Web アプリケーションで jasperReports と iReports を使用してレポートを生成しています。

ジャスパーレポートを調べたところ、レポート内に透かしを簡単に挿入できました..

ただし、私の目的は、透かし文字列 (Michael Jackson) をページ全体に配置することです。

私だけが見つけることができるプロパティを通過するrotation option of left/right and upside down...

レポートのページ全体に透かしを入れることはできますか..

ireportレポートのデザインに使用しています...

4

3 に答える 3

6

テキストを90度、180度、または270度以外の角度に回転させることは、JasperReportsではネイティブにサポートされていません。解決策は、回転したテキストの画像を生成し、代わりにそれをレポートにレンダリングすることです。

このjasperforgeスレッドの最後の投稿で、ユーザー「artduc」はまさにそれを行うためのレポートスクリプトレットを共有しています。

于 2012-07-26T14:41:38.823 に答える
3

GenericJonが提案したことを綴っているだけです...

背景バンドに画像要素を追加します (設定はスクリーンショットを参照)。

Renderable を実装し、パラメータ マップを介して Jasper Reports に渡します。

InputStream jasperReportInputStream = getClass().getResourceAsStream("/reports/Test.jasper");  
JRBeanCollectionDataSource dataSource = ...    
Map parameters = new HashMap();
parameters.put("watermark", new WaterMarkRenderer(true);    
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReportInputStream, parameters, dataSource);

透かしレンダラー:

@SuppressWarnings("deprecation")
public class WaterMarkRenderer extends JRAbstractRenderer
{
  private boolean m_licenseTrial = false;

  public WaterMarkRenderer(boolean isLicenseTrial)
  {
    m_licenseTrial = isLicenseTrial;
  }

  @Override
  public byte getType()
  {
    // no idea what this does
    return RenderableTypeEnum.SVG.getValue();
  }

  @Override
  public byte getImageType()
  {
    // no idea what this does
    return ImageTypeEnum.UNKNOWN.getValue();
  }

  @Override
  public Dimension2D getDimension() throws JRException
  {
    // A4 in pixel: 595x842
    // this seems to override whatever is configured in jasperreports studio
    return new Dimension(595 - 2 * 40, 700);
  }

  @Override
  public byte[] getImageData() throws JRException
  {
    // no idea what this does
    return new byte[0];
  }

  @Override
  public void render(Graphics2D g2, Rectangle2D rectangle) throws JRException
  {
    if(m_licenseTrial)
    {
      AffineTransform originalTransform = g2.getTransform();

      // just for debugging
      g2.setColor(Color.BLUE);
      g2.draw(rectangle);

      g2.translate(rectangle.getX() + 100, rectangle.getMaxY());
      g2.rotate(-55 * Math.PI / 180);

      Font font = new Font("Arial", Font.PLAIN, 120);
      Shape shape = font.createGlyphVector(g2.getFontRenderContext(), "Trial License").getOutline();
      g2.setColor(new Color(255, 0, 0, 100));
      g2.setStroke(new BasicStroke(1));
      g2.draw(shape);

      g2.setTransform(originalTransform);
    }
  }
}

そして結果:

于 2015-04-05T00:51:20.870 に答える