protected void processRenderableContent(final RenderableReplacedContentBox node) {
    try {
      final ReportAttributeMap map = node.getAttributes();
      final AttributeList attrs = new AttributeList();
      HtmlTagHelper.applyHtmlAttributes(map, attrs);
      if (attrs.isEmpty() == false) {
        xmlWriter.writeTag(HtmlPrinter.XHTML_NAMESPACE, DIV_TAG, attrs, XmlWriterSupport.OPEN);
      }

      textExtractorHelper.writeLocalAnchor(node.getStyleSheet());

      final StyleSheet styleSheet = node.getStyleSheet();
      final String target = (String) styleSheet.getStyleProperty(ElementStyleKeys.HREF_TARGET);
      if (target != null) {
        textExtractorHelper.handleLinkOnElement(styleSheet, target);
      }

      processReplacedContent(node);

      if (target != null) {
        xmlWriter.writeCloseTag();
      }
      if (attrs.isEmpty() == false) {
        xmlWriter.writeCloseTag();
      }
    } catch (final IOException e) {
      throw new RuntimeException("Failed", e);
    } catch (final ContentIOException e) {
      throw new RuntimeException("Failed", e);
    }
  }
  /**
   * Prints a paragraph cell. This is a special entry point used by the processContent method and is
   * never called from elsewhere. This method assumes that the attributes of the paragraph have been
   * processed as part of the table-cell processing.
   *
   * @param box the paragraph box
   * @throws IOException if an IO error occured.
   */
  protected void processInitialBox(final ParagraphRenderBox box) throws IOException {
    if (box.getStaticBoxLayoutProperties().isVisible() == false) {
      return;
    }

    final StyleSheet styleSheet = box.getStyleSheet();
    final String target = (String) styleSheet.getStyleProperty(ElementStyleKeys.HREF_TARGET);
    if (target != null) {
      textExtractorHelper.handleLinkOnElement(styleSheet, target);
      processStack = new HtmlTextExtractorState(processStack, true);
    } else {
      processStack = new HtmlTextExtractorState(processStack, false);
    }

    if (Boolean.TRUE.equals(
            box.getAttributes()
                .getAttribute(AttributeNames.Html.NAMESPACE, AttributeNames.Html.SUPPRESS_CONTENT))
        == false) {
      processParagraphChilds(box);
    }

    if (processStack.isWrittenTag()) {
      xmlWriter.writeCloseTag();
    }
    processStack = processStack.getParent();
  }