Esempio n. 1
0
 protected void copy(JRPrintImage printImage) {
   printImage.setRenderable(getRenderable());
   printImage.setAnchorName(getAnchorName());
   printImage.setHyperlinkReference(getHyperlinkReference());
   printImage.setHyperlinkAnchor(getHyperlinkAnchor());
   printImage.setHyperlinkPage(getHyperlinkPage());
   printImage.setHyperlinkTooltip(getHyperlinkTooltip());
   printImage.setBookmarkLevel(getBookmarkLevel());
   printImage.setHyperlinkParameters(hyperlinkParameters);
   //		transferProperties(printImage);
 }
  public void setImageSource(String imageSource) throws JRException {
    if (isEmbedded) {
      try {
        ByteArrayInputStream bais =
            new ByteArrayInputStream(imageSource.getBytes("UTF-8")); // FIXMENOW other encodings ?
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        Base64Decoder decoder = new Base64Decoder(bais, baos);
        decoder.process();

        printImage.setRenderer(
            JRImageRenderer.getInstance(baos.toByteArray())); // , JRImage.ON_ERROR_TYPE_ERROR));
      } catch (Exception e) {
        throw new JRException("Error decoding embedded image.", e);
      }
    } else {
      printImage.setRenderer(JRImageRenderer.getInstance(imageSource));
    }
  }
  @Override
  public void test() {
    super.test();

    numberOfPagesTest(1);

    try {
      byte[] imageData =
          JRImageLoader.getInstance(DefaultJasperReportsContext.getInstance())
              .loadBytesFromAwtImage(image, ImageTypeEnum.JPEG);
      JRPrintImage jrImage = (JRPrintImage) getElementAt("title.image1", 0);
      Assert.assertTrue(
          "image data",
          Arrays.equals(
              imageData,
              jrImage.getRenderable().getImageData(DefaultJasperReportsContext.getInstance())));
      Assert.assertEquals("scale image", ScaleImageEnum.CLIP, jrImage.getScaleImageValue());
    } catch (JRException e) {
      e.printStackTrace();
      Assert.fail(e.getMessage());
    }
  }
 protected float getYAlignFactor(JRPrintImage image) {
   float yalignFactor = 0f;
   switch (image.getVerticalAlignmentValue()) {
     case BOTTOM:
       {
         yalignFactor = 1f;
         break;
       }
     case MIDDLE:
       {
         yalignFactor = 0.5f;
         break;
       }
     case TOP:
     default:
       {
         yalignFactor = 0f;
         break;
       }
   }
   return yalignFactor;
 }
 protected float getXAlignFactor(JRPrintImage image) {
   float xalignFactor = 0f;
   switch (image.getHorizontalAlignmentValue()) {
     case RIGHT:
       {
         xalignFactor = 1f;
         break;
       }
     case CENTER:
       {
         xalignFactor = 0.5f;
         break;
       }
     case LEFT:
     default:
       {
         xalignFactor = 0f;
         break;
       }
   }
   return xalignFactor;
 }
  protected void exportReportToOasisZip(OutputStream os) throws JRException, IOException {
    OasisZip oasisZip =
        new FileBufferedOasisZip(((JROpenDocumentExporterNature) nature).getOpenDocumentNature());

    ExportZipEntry tempBodyEntry = new FileBufferedZipEntry(null);
    ExportZipEntry tempStyleEntry = new FileBufferedZipEntry(null);

    tempBodyWriter = tempBodyEntry.getWriter();
    tempStyleWriter = tempStyleEntry.getWriter();

    styleCache = new StyleCache(tempStyleWriter, fontMap, getExporterKey());

    Writer stylesWriter = oasisZip.getStylesEntry().getWriter();

    StyleBuilder styleBuilder = new StyleBuilder(jasperPrintList, stylesWriter);
    styleBuilder.build();

    stylesWriter.close();

    for (reportIndex = 0; reportIndex < jasperPrintList.size(); reportIndex++) {
      setJasperPrint(jasperPrintList.get(reportIndex));

      List<JRPrintPage> pages = jasperPrint.getPages();
      if (pages != null && pages.size() > 0) {
        if (isModeBatch) {
          startPageIndex = 0;
          endPageIndex = pages.size() - 1;
        }

        JRPrintPage page = null;
        for (pageIndex = startPageIndex; pageIndex <= endPageIndex; pageIndex++) {
          if (Thread.interrupted()) {
            throw new JRException("Current thread interrupted.");
          }

          page = pages.get(pageIndex);

          exportPage(page);
        }
      }
    }

    tempBodyWriter.flush();
    tempStyleWriter.flush();

    tempBodyWriter.close();
    tempStyleWriter.close();

    /*   */
    ContentBuilder contentBuilder =
        new ContentBuilder(
            oasisZip.getContentEntry(),
            tempStyleEntry,
            tempBodyEntry,
            styleCache.getFontFaces(),
            ((JROpenDocumentExporterNature) nature).getOpenDocumentNature());
    contentBuilder.build();

    tempStyleEntry.dispose();
    tempBodyEntry.dispose();

    if ((imagesToProcess != null && imagesToProcess.size() > 0)) {
      for (Iterator<JRPrintElementIndex> it = imagesToProcess.iterator(); it.hasNext(); ) {
        JRPrintElementIndex imageIndex = it.next();

        JRPrintImage image = getImage(jasperPrintList, imageIndex);
        JRRenderable renderer = image.getRenderer();
        if (renderer.getType() == JRRenderable.TYPE_SVG) {
          renderer =
              new JRWrappingSvgRenderer(
                  renderer,
                  new Dimension(image.getWidth(), image.getHeight()),
                  ModeEnum.OPAQUE == image.getModeValue() ? image.getBackcolor() : null);
        }

        oasisZip.addEntry( // FIXMEODT optimize with a different implementation of entry
            new FileBufferedZipEntry(
                "Pictures/" + getImageName(imageIndex), renderer.getImageData()));
      }
    }

    oasisZip.zipEntries(os);

    oasisZip.dispose();
  }
  /**
   * @throws JRException
   * @throws IOException
   */
  public void exportImage(JRPrintImage image) throws JRException, IOException {
    xmlWriter.startElement(JRXmlConstants.ELEMENT_image);
    xmlWriter.addAttribute(JRXmlConstants.ATTRIBUTE_scaleImage, image.getOwnScaleImageValue());
    xmlWriter.addAttribute(JRXmlConstants.ATTRIBUTE_hAlign, image.getOwnHorizontalAlignmentValue());
    xmlWriter.addAttribute(JRXmlConstants.ATTRIBUTE_vAlign, image.getOwnVerticalAlignmentValue());
    xmlWriter.addAttribute(JRXmlConstants.ATTRIBUTE_isLazy, image.isLazy(), false);
    xmlWriter.addAttribute(
        JRXmlConstants.ATTRIBUTE_onErrorType, image.getOnErrorTypeValue(), OnErrorTypeEnum.ERROR);

    if (hyperlinkProducerFactory == null) {
      xmlWriter.addEncodedAttribute(
          JRXmlConstants.ATTRIBUTE_hyperlinkType,
          image.getLinkType(),
          HyperlinkTypeEnum.NONE.getName());
      xmlWriter.addEncodedAttribute(
          JRXmlConstants.ATTRIBUTE_hyperlinkReference, image.getHyperlinkReference());
      xmlWriter.addEncodedAttribute(
          JRXmlConstants.ATTRIBUTE_hyperlinkAnchor, image.getHyperlinkAnchor());
      xmlWriter.addAttribute(JRXmlConstants.ATTRIBUTE_hyperlinkPage, image.getHyperlinkPage());
    } else {
      String reference = hyperlinkProducerFactory.produceHyperlink(image);
      if (reference != null) {
        xmlWriter.addAttribute(JRXmlConstants.ATTRIBUTE_hyperlinkType, HyperlinkTypeEnum.REFERENCE);
        xmlWriter.addEncodedAttribute(JRXmlConstants.ATTRIBUTE_hyperlinkReference, reference);
      }
    }

    xmlWriter.addAttribute(
        JRXmlConstants.ATTRIBUTE_hyperlinkTarget,
        image.getLinkTarget(),
        HyperlinkTargetEnum.SELF
            .getName()); // FIXMETARGET this exporter is used in the Flash viewer
    xmlWriter.addEncodedAttribute(
        JRXmlConstants.ATTRIBUTE_hyperlinkTooltip, image.getHyperlinkTooltip());
    xmlWriter.addEncodedAttribute(JRXmlConstants.ATTRIBUTE_anchorName, image.getAnchorName());
    xmlWriter.addAttribute(
        JRXmlConstants.ATTRIBUTE_bookmarkLevel, image.getBookmarkLevel(), JRAnchor.NO_BOOKMARK);

    exportReportElement(image);
    exportBox(image.getLineBox());
    exportGraphicElement(image);

    JRRenderable renderer = image.getRenderer();
    if (renderer != null) {
      xmlWriter.startElement(JRXmlConstants.ELEMENT_imageSource);
      xmlWriter.addAttribute(
          JRXmlConstants.ATTRIBUTE_isEmbedded, isEmbeddingImages && !image.isLazy(), false);

      String imageSource = "";

      if (renderer.getType() == JRRenderable.TYPE_SVG) {
        renderer =
            new JRWrappingSvgRenderer(
                renderer,
                new Dimension(image.getWidth(), image.getHeight()),
                ModeEnum.OPAQUE == image.getModeValue() ? image.getBackcolor() : null);
      }

      if (image.isLazy()) {
        imageSource = ((JRImageRenderer) renderer).getImageLocation();
      } else if (isEmbeddingImages) {
        try {
          ByteArrayInputStream bais = new ByteArrayInputStream(renderer.getImageData());
          ByteArrayOutputStream baos = new ByteArrayOutputStream();

          Base64Encoder encoder = new Base64Encoder(bais, baos);
          encoder.process();

          imageSource = new String(baos.toByteArray(), DEFAULT_XML_ENCODING);
        } catch (IOException e) {
          throw new JRException("Error embedding image into XML.", e);
        }
      } else {
        if (renderer.getType() == JRRenderable.TYPE_IMAGE
            && rendererToImagePathMap.containsKey(renderer)) {
          imageSource = rendererToImagePathMap.get(renderer);
        } else {
          imageSource = IMAGE_PREFIX + getNextImageId();
          imageNameToImageDataMap.put(imageSource, renderer.getImageData());

          imageSource = new File(imagesDir, imageSource).getPath();
          rendererToImagePathMap.put(renderer, imageSource);
        }
      }

      xmlWriter.writeCDATA(imageSource);
      xmlWriter.closeElement();
    }

    if (hyperlinkProducerFactory == null) {
      exportHyperlinkParameters(image);
    }

    xmlWriter.closeElement();
  }
  public JasperPrint fill(HttpServletRequest req, UserAccount user) throws Exception {
    // JasperPrint
    JasperPrint jasperPrint = new JasperPrint();
    jasperPrint.setName("NoReport");
    jasperPrint.setPageWidth(595);
    jasperPrint.setPageHeight(842);

    // Fonts
    JRBaseStyle normalStyle = new JRBaseStyle("Arial_Normal");
    normalStyle.setFontName("Arial");
    normalStyle.setFontSize(8);
    normalStyle.setPdfFontName("Helvetica");
    normalStyle.setPdfEncoding("Cp1252");
    normalStyle.setPdfEmbedded(false);
    jasperPrint.addStyle(normalStyle);

    JRBaseStyle boldStyle = new JRBaseStyle("Arial_Bold");
    boldStyle.setFontName("Arial");
    boldStyle.setFontSize(8);
    boldStyle.setBold(true);
    boldStyle.setPdfFontName("Helvetica-Bold");
    boldStyle.setPdfEncoding("Cp1252");
    boldStyle.setPdfEmbedded(false);
    jasperPrint.addStyle(boldStyle);

    JRBaseStyle italicStyle = new JRBaseStyle("Arial_Italic");
    italicStyle.setFontName("Arial");
    italicStyle.setFontSize(8);
    italicStyle.setItalic(true);
    italicStyle.setPdfFontName("Helvetica-Oblique");
    italicStyle.setPdfEncoding("Cp1252");
    italicStyle.setPdfEmbedded(false);
    jasperPrint.addStyle(italicStyle);

    JRPrintPage page = new JRBasePrintPage();

    JRPrintLine line = new JRBasePrintLine(jasperPrint.getDefaultStyleProvider());
    line.setX(40);
    line.setY(50);
    line.setWidth(515);
    line.setHeight(0);
    page.addElement(line);

    JRPrintImage image = new JRBasePrintImage(jasperPrint.getDefaultStyleProvider());
    image.setX(45);
    image.setY(55);
    image.setWidth(165);
    image.setHeight(40);
    image.setScaleImage(JRImage.SCALE_IMAGE_CLIP);
    image.setRenderer(
        JRImageRenderer.getInstance(
            JRLoader.loadBytes(this.getClass().getResourceAsStream("jasperreports.gif"))));
    page.addElement(image);

    JRPrintText text = new JRBasePrintText(jasperPrint.getDefaultStyleProvider());
    text.setX(210);
    text.setY(55);
    text.setWidth(345);
    text.setHeight(30);
    text.setTextHeight(text.getHeight());
    text.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_RIGHT);
    text.setLineSpacingFactor(1.3133681f);
    text.setLeadingOffset(-4.955078f);
    text.setStyle(boldStyle);
    text.setFontSize(18);
    text.setText("JasperReports Project Description");
    page.addElement(text);

    text = new JRBasePrintText(jasperPrint.getDefaultStyleProvider());
    text.setX(210);
    text.setY(85);
    text.setWidth(325);
    text.setHeight(15);
    text.setTextHeight(text.getHeight());
    text.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_RIGHT);
    text.setLineSpacingFactor(1.329241f);
    text.setLeadingOffset(-4.076172f);
    text.setStyle(italicStyle);
    text.setFontSize(12);
    text.setText((new SimpleDateFormat("EEE, MMM d, yyyy")).format(new Date()));
    page.addElement(text);

    text = new JRBasePrintText(jasperPrint.getDefaultStyleProvider());
    text.setX(40);
    text.setY(150);
    text.setWidth(515);
    text.setHeight(200);
    text.setTextHeight(text.getHeight());
    text.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_JUSTIFIED);
    text.setLineSpacingFactor(1.329241f);
    text.setLeadingOffset(-4.076172f);
    text.setStyle(normalStyle);
    text.setFontSize(14);
    text.setText(
        "JasperReports is a powerful report-generating tool that has the ability to deliver rich content onto the screen, to the printer or into PDF, HTML, XLS, CSV or XML files.\n\n"
            + "It is entirely written in Java and can be used in a variety of Java enabled applications, including J2EE or Web applications, to generate dynamic content.\n\n"
            + "Its main purpose is to help creating page oriented, ready to print documents in a simple and flexible manner.");
    page.addElement(text);

    jasperPrint.addPage(page);

    return jasperPrint;
  }