Вопрос по jasper-reports, reporting, ireport – Водяной знак на странице в JasperReports

3

Мы используем jasperReports и iReports в нашем веб-приложении для создания отчетов.

Когда я исследовал отчеты о яшме, я смог легко вставить водяной знак в отчет.

Однако моя цель состоит в том, чтобы поместить текстовый знак String (Майкл Джексон) по всей странице.

Проходя через свойства, я могу только найтиrotation option of left/right and upside down...

Можно ли разместить водяной знак в отчете по всей странице?

я используюireport разработать отчет ...

Ваш Ответ

3   ответа
5

кроме 90, 180 или 270 градусов, изначально не поддерживается JasperReports. Решением будет создание изображения повернутого текста и его отображение в отчете.

В последнем постеэта нить ясперфоржапользователь & quot; artduc & quot; делится сценарием отчета для выполнения именно этого.

GenericJon Я предполагаю, что вращение изображения с помощью любого стандартного редактора изображений послужит цели .. Использование скриптлета в коде излишне добавит одну дополнительную банку к моему приложению. Спасибо за комментарии ... AngelsandDemons
0

созданного вами с использованием отчетов Jasper. Либо читать PDF как byteArray. Тогда используйте это используя itext PdfReader

byte [] dataArray = JasperExportManager.exportReportToPdf(jasperPrint);
PdfReader pdfReader = new PdfReader(dataArray);

или прочитайте pdf из локации, если она уже написана

JasperExportManager.exportReportToPdfFile(jasperPrint,pdfFileLocation); 
PdfReader pdfReader = new PdfReader(pdfFileLocation);

Я надеюсь, что следующий фрагмент поможет, когда я читаю файл и добавляю водяной знак, удаляю существующий файл и пишу новый.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
BaseFont bf = null;
PdfBoolean pdfBoolean_YES = new PdfBoolean(true);
PdfReader pdfReader = new PdfReader(pdfFileLocation);
PdfStamper pdfStamper = new PdfStamper(pdfReader, baos);  
PdfContentByte contentunder = pdfStamper.getUnderContent(1);

contentunder.saveState();                   
contentunder.setColorFill(new Color(200, 200, 200));
contentunder.beginText();
bf = BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
contentunder.setFontAndSize(bf, 90);
contentunder.showTextAligned(Element.ALIGN_MIDDLE, "  WaterMark Content", 200, 400, 45);
contentunder.endText();    
contentunder.restoreState();

// We could stack those ViewerPreferences using '|' ... :)
pdfStamper.addViewerPreference(PdfName.HIDETOOLBAR, pdfBoolean_YES);
pdfStamper.addViewerPreference(PdfName.HIDEMENUBAR, pdfBoolean_YES);
//pdfStamper.addViewerPreference(PdfName.HIDEWINDOWUI, pdfBoolean_YES);                   

pdfReader.close();
pdfStamper.close();
//deleting existing file                 
FileUtil.delete(pdfFileLocation);

FileOutputStream fos = new FileOutputStream(pdfFileLocation);
baos.writeTo(fos);                    
fos.flush();
//close streams                
baos.close();
fos.close();
2

Добавьте элемент изображения в фоновую полосу (настройки смотрите на скриншоте).

Реализуйте 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);

WatermarkRenderer:

@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);
    }
  }
}

И результат:

Похожие вопросы