public static void displayImageInfo(ImageInfo info) {

    ImageSize size = info.getSize();

    Dimension2D dPt = size.getDimensionPt();
    Dimension dPx = size.getDimensionPx();

    log.debug(
        info.getOriginalURI()
            + " "
            + info.getMimeType()
            + " "
            + Math.round(dPx.getWidth())
            + "x"
            + Math.round(dPx.getHeight()));

    log.debug(
        "Resolution:"
            + Math.round(size.getDpiHorizontal())
            + "x"
            + Math.round(size.getDpiVertical()));
    log.debug(
        "Print size: "
            + Math.round(dPt.getWidth() / 72)
            + "\" x"
            + Math.round(dPt.getHeight() / 72)
            + "\"");
  }
    public static CxCy scale(ImageInfo imageInfo, double xEmu, double yEmu) {
      ImageSize size = imageInfo.getSize();
      double iwEmu = toEmu(size.getWidthPx(), size.getDpiHorizontal());
      double ihEmu = toEmu(size.getHeightPx(), size.getDpiVertical());

      return scaleToFit(iwEmu, ihEmu, xEmu, yEmu);
    }
  /**
   * Create a <wp:inline> element suitable for this image, which can be _embedded_ in
   * w:p/w:r/w:drawing.
   *
   * @param filenameHint Any text, for example the original filename
   * @param altText Like HTML's alt text
   * @param id1 An id unique in the document
   * @param id2 Another id unique in the document
   * @param cx Image width in twip
   * @param link true if this is to be linked not embedded None of these things seem to be exposed
   *     in Word 2007's user interface, but Word won't open the document if any of the attributes
   *     these go in (except @ desc) aren't present!
   * @throws Exception
   */
  public Inline createImageInline(
      String filenameHint, String altText, int id1, int id2, long cx, boolean link)
      throws Exception {

    ImageSize size = imageInfo.getSize();

    Dimension2D dPt = size.getDimensionPt();
    double imageWidthTwips = dPt.getWidth() * 20;
    log.debug("imageWidthTwips: " + imageWidthTwips);

    long cy;

    log.debug("Scaling image height to retain aspect ratio");
    cy = UnitsOfMeasurement.twipToEMU(dPt.getHeight() * 20 * cx / imageWidthTwips);

    // Now convert cx to EMU
    cx = UnitsOfMeasurement.twipToEMU(cx);

    log.debug("cx=" + cx + "; cy=" + cy);

    return createImageInline(filenameHint, altText, id1, id2, cx, cy, link);
  }
    public static CxCy scale(ImageInfo imageInfo, PageDimensions page) {

      double writableWidthTwips = page.getWritableWidthTwips();
      log.debug("writableWidthTwips: " + writableWidthTwips);

      ImageSize size = imageInfo.getSize();

      Dimension2D dPt = size.getDimensionPt();
      double imageWidthTwips = dPt.getWidth() * 20;
      log.debug("imageWidthTwips: " + imageWidthTwips);

      long cx;
      long cy;
      boolean scaled = false;
      if (imageWidthTwips > writableWidthTwips) {

        log.debug("Scaling image to fit page width");
        scaled = true;

        cx = UnitsOfMeasurement.twipToEMU(writableWidthTwips);
        cy =
            UnitsOfMeasurement.twipToEMU(
                dPt.getHeight() * 20 * writableWidthTwips / imageWidthTwips);

      } else {

        log.debug("Scaling image - not necessary");

        cx = UnitsOfMeasurement.twipToEMU(imageWidthTwips);
        cy = UnitsOfMeasurement.twipToEMU(dPt.getHeight() * 20);
      }

      log.debug("cx=" + cx + "; cy=" + cy);

      return new CxCy(cx, cy, scaled);
    }