public void parse(File file, int maxPaths, ProgressMonitor monitor) throws Exception {
    monitor.beginTask(tr("Parsing PDF", 1));

    PDDocument document = PDDocument.load(file);

    if (document.isEncrypted()) {
      throw new Exception(tr("Encrypted documents not supported."));
    }

    List<?> allPages = document.getDocumentCatalog().getAllPages();

    if (allPages.size() != 1) {
      throw new Exception(tr("The PDF file must have exactly one page."));
    }

    PDPage page = (PDPage) allPages.get(0);
    PDRectangle pageSize = page.findMediaBox();
    Integer rotationVal = page.getRotation();
    int rotation = 0;
    if (rotationVal != null) {
      rotation = rotationVal.intValue();
    }

    GraphicsProcessor p = new GraphicsProcessor(target, rotation, maxPaths, monitor);
    PageDrawer drawer = new PageDrawer();
    drawer.drawPage(p, page);
    this.target.bounds =
        new Rectangle2D.Double(
            pageSize.getLowerLeftX(),
            pageSize.getLowerLeftY(),
            pageSize.getWidth(),
            pageSize.getHeight());

    monitor.finishTask();
  }
  // renders a page to the given graphics
  public void renderPage(
      PDPage page, Paint paint, Canvas canvas, int width, int height, float scaleX, float scaleY)
      throws IOException {
    canvas.scale(scaleX, scaleY);
    // TODO should we be passing the scale to PageDrawer rather than messing with Graphics?

    PDRectangle cropBox = page.getCropBox();
    int rotationAngle = page.getRotation();

    if (rotationAngle != 0) {
      float translateX = 0;
      float translateY = 0;
      switch (rotationAngle) {
        case 90:
          translateX = cropBox.getHeight();
          break;
        case 270:
          translateY = cropBox.getWidth();
          break;
        case 180:
          translateX = cropBox.getWidth();
          translateY = cropBox.getHeight();
          break;
      }
      canvas.translate(translateX, translateY);
      canvas.rotate((float) Math.toRadians(rotationAngle));
    }

    PageDrawer drawer = new PageDrawer(page);
    drawer.drawPage(paint, canvas, cropBox);
  }
Example #3
-1
  // renders a page to the given graphics
  private void renderPage(
      PDPage page, Graphics2D graphics, int width, int height, float scaleX, float scaleY)
      throws IOException {
    graphics.clearRect(0, 0, width, height);

    graphics.scale(scaleX, scaleY);
    // TODO should we be passing the scale to PageDrawer rather than messing with Graphics?

    PDRectangle cropBox = page.getCropBox();
    int rotationAngle = page.getRotation();

    if (rotationAngle != 0) {
      float translateX = 0;
      float translateY = 0;
      switch (rotationAngle) {
        case 90:
          translateX = cropBox.getHeight();
          break;
        case 270:
          translateY = cropBox.getWidth();
          break;
        case 180:
          translateX = cropBox.getWidth();
          translateY = cropBox.getHeight();
          break;
      }
      graphics.translate(translateX, translateY);
      graphics.rotate((float) Math.toRadians(rotationAngle));
    }

    // the end-user may provide a custom PageDrawer
    PageDrawerParameters parameters = new PageDrawerParameters(this, page);
    PageDrawer drawer = createPageDrawer(parameters);
    drawer.drawPage(graphics, cropBox);
  }