Select text in the Java PDF viewer
The JPedal API contains methods to allow the user to control highlights to appear on the page. This is all handled by the class TextLines which can be accessed via PdfDecoderInt.getTextLines().
Adding Highlights
Other than using the mouse to highlight text within the Viewer you can also add highlights programmatically using TextLines.addHighlights(int[][] highlights, boolean areaSelect, int page). The 3 inputs function as follows.
- highlights - An array of integer arrays defining highlights, each containing 4 values in the order x, y, width, height
Please note: PDF co-ordinates, which treat the bottom left of the page at origin (0,0) are used and not Java co-ordinates (where the origin is top left). You can easily see PDF co-ordinates displayed in the Java PDF viewer. - areaSelect - A boolean defining if we should use the highlight areas as the area to highlight (true), or the start and end point for selecting continuous text.
- page - An integer representing the page number for the page to add the highlights to. It should be noted that highlights are removed on multiple even such as page change, mouse click, search, and other mouse interactions. When new highlights are added TextLines.hasHighlightAreasUpdated() will return true until the highlights are returned using the methods detailed below.
Getting Highlights
Highlights can be returned from one of two methods.
- Using TextLines.getAllHighlights() you can get all the highlights currently set as a Map using the page number as the key.
- Using TextLines.getHighlightedAreasAs2DArray(int page) you can get all the highlights for the specified page.
The integer array returned by the map and TextLines.getHighlightedAreasAs2DArray(int page) is an array of integer arrays defining highlights, each containing 4 values in the order x, y, width, height.
Please note: PDF co-ordinates, which treat the bottom left of the page at origin (0,0) are used and not Java co-ordinates (where the origin is top left). You can easily see PDF co-ordinates displayed in the Java PDF viewer.
After calling these methods TextLines.hasHighlightAreasUpdated() will start returning false.
Removing Highlights
The highlights can be only be cleared in their entirety using TextLines.clearHighlights(). This method removes all highlights, on all pages, after which TextLines.hasHighlightAreasUpdated() will return true until the highlights are returned using the methods detailed above.
Highlight Colour options
The highlighting color can be done in one of two ways. Either a semi-transparent coloured shaped is layered over the text or the colours of the highlighted area are inverted.
Both options can be set using PdfDecoder.modifyJPedalParameters(Map<Integer,Object> values) to set values for these options.
- Set a color for the highlights using JPedalSettings.TEXT_HIGHLIGHT_COLOUR as the key in the Map with an integer representation of an RGB value (can be retrieved using Color.getRGB()).
Color color = new Color(0, 255, 0); Map mapValues=new HashMap(); mapValues.put(JPedalSettings.TEXT_HIGHLIGHT_COLOUR, Color.getRGB()); PdfDecoder.modifyJPedalParameters(mapValues);
- Set the highlights to invert the page colors using JPedalSettings.INVERT_HIGHLIGHT as the key in the Map with a Boolean value to control this.
Map mapValues=new HashMap(); mapValues.put(JPedalSettings.INVERT_HIGHLIGHT, Boolean.TRUE); PdfDecoder.modifyJPedalParameters(mapValues);