Uploaded image for project: 'PDFBox'
  1. PDFBox
  2. PDFBOX-3359

Drawing to Graphics2D / ScratchFileBuffer not closed

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.1
    • 3.0.0 PDFBox
    • Rendering
    • None

    Description

      First, there is a little bug on PDFRenderer.renderPageToGraphics(int pageIndex, Graphics2D graphics, float scale) when using scale != 1 the call to clearRect() fills the original size with white background, but it should fill the scaled size.

      Second, I implemented a JPanel which is painted using that function and on every paint this message goes to the console:
      "DEBUG ScratchFileBuffer:516 - ScratchFileBuffer not closed!". Here is the code to test it, run it and resize the JFrame:

      PanelTest.java
      import java.awt.Dimension;
      import java.awt.Graphics;
      import java.awt.Graphics2D;
      import java.io.File;
      import java.io.IOException;
      
      import javax.swing.JFrame;
      import javax.swing.JPanel;
      import javax.swing.SwingUtilities;
      import javax.swing.WindowConstants;
      
      import org.apache.pdfbox.pdmodel.PDDocument;
      import org.apache.pdfbox.rendering.PDFRenderer;
      
      public class PanelTest {
         
          private static JPanel getTestPanel() {
              PDDocument doc = null;
              try {
                  doc = PDDocument.load(new File("anyfile.pdf"));
              } catch (IOException e) {
                  e.printStackTrace();
              }
              final PDFRenderer renderer = new PDFRenderer(doc);
              JPanel panel = new JPanel() {
                  @Override
                  protected void paintComponent(Graphics g) {
                      try {
                          renderer.renderPageToGraphics(0, (Graphics2D) g, 0.5f);
                      } catch (IOException e) {
                          e.printStackTrace();
                      }
                  }
              };
              return panel;
          }
      
          public static void main(String[] args) throws Exception {
              SwingUtilities.invokeLater(new Runnable() {
                  @Override
                  public void run() {
                      JFrame frame = new JFrame();
                      frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                      frame.add(getTestPanel());
                      frame.pack();
                      frame.setSize(600, 400);
                      Dimension paneSize = frame.getSize();
                      Dimension screenSize = frame.getToolkit().getScreenSize();
                      frame.setLocation((screenSize.width - paneSize.width) / 2, (screenSize.height - paneSize.height) / 2);
                      frame.setTitle("Test");
                      frame.setVisible(true);
                  }
              });
          }
      }
      

      Ivan

      Attachments

        Issue Links

          Activity

            People

              lehmi Andreas Lehmkühler
              ivanrf Ivan Ridao Freitas
              Votes:
              1 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: