You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2016/12/20 21:32:54 UTC

[3/4] tika git commit: clean up tabs

clean up tabs


Project: http://git-wip-us.apache.org/repos/asf/tika/repo
Commit: http://git-wip-us.apache.org/repos/asf/tika/commit/c83f87b2
Tree: http://git-wip-us.apache.org/repos/asf/tika/tree/c83f87b2
Diff: http://git-wip-us.apache.org/repos/asf/tika/diff/c83f87b2

Branch: refs/heads/master
Commit: c83f87b2acc6a8fb69dc37991d43542367154c1a
Parents: 8e12ebe
Author: tballison <ta...@mitre.org>
Authored: Tue Dec 20 15:16:35 2016 -0500
Committer: tballison <ta...@mitre.org>
Committed: Tue Dec 20 15:16:35 2016 -0500

----------------------------------------------------------------------
 .../tika/parser/ocr/TesseractOCRConfig.java     | 808 ++++++++++---------
 1 file changed, 415 insertions(+), 393 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tika/blob/c83f87b2/tika-parsers/src/main/java/org/apache/tika/parser/ocr/TesseractOCRConfig.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/ocr/TesseractOCRConfig.java b/tika-parsers/src/main/java/org/apache/tika/parser/ocr/TesseractOCRConfig.java
index 7d6cd3f..a08b0e2 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/ocr/TesseractOCRConfig.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/ocr/TesseractOCRConfig.java
@@ -25,169 +25,172 @@ import java.util.Properties;
 
 /**
  * Configuration for TesseractOCRParser.
- *
+ * <p>
  * This allows to enable TesseractOCRParser and set its parameters:
  * <p>
  * TesseractOCRConfig config = new TesseractOCRConfig();<br>
  * config.setTesseractPath(tesseractFolder);<br>
  * parseContext.set(TesseractOCRConfig.class, config);<br>
  * </p>
- *
+ * <p>
  * Parameters can also be set by either editing the existing TesseractOCRConfig.properties file in,
  * tika-parser/src/main/resources/org/apache/tika/parser/ocr, or overriding it by creating your own
  * and placing it in the package org/apache/tika/parser/ocr on the classpath.
- *
  */
-public class TesseractOCRConfig implements Serializable{
+public class TesseractOCRConfig implements Serializable {
 
-	private static final long serialVersionUID = -4861942486845757891L;
+    private static final long serialVersionUID = -4861942486845757891L;
 
-	public enum OUTPUT_TYPE {
-		TXT,
-		HOCR
-	}
+    public enum OUTPUT_TYPE {
+        TXT,
+        HOCR
+    }
 
-	// Path to tesseract installation folder, if not on system path.
-	private  String tesseractPath = "";
+    // Path to tesseract installation folder, if not on system path.
+    private String tesseractPath = "";
 
     // Path to the 'tessdata' folder, which contains language files and config files.
     private String tessdataPath = "";
 
-	// Language dictionary to be used.
-	private  String language = "eng";
-
-	// Tesseract page segmentation mode.
-	private  String pageSegMode = "1";
-
-	// Minimum file size to submit file to ocr.
-	private  int minFileSizeToOcr = 0;
-
-	// Maximum file size to submit file to ocr.
-	private  int maxFileSizeToOcr = Integer.MAX_VALUE;
-
-	// Maximum time (seconds) to wait for the ocring process termination
-	private int timeout = 120;
-	
-	// The format of the ocr'ed output to be returned, txt or hocr.
-	private OUTPUT_TYPE outputType = OUTPUT_TYPE.TXT;
-
-	// enable image processing (optional)
-	private int enableImageProcessing = 0;
-
-	// Path to ImageMagick program, if not on system path.
-	private String ImageMagickPath = "";
-	
-	// resolution of processed image (in dpi).
-	private int density = 300;
-	
-	// number of bits in a color sample within a pixel.
-	private int depth = 4;
-	
-	// colorspace of processed image.
-	private String colorspace = "gray";
-	
-	// filter to be applied to the processed image.
-	private String filter = "triangle";
-	
-	// factor by which image is to be scaled.
-	private int resize = 900;
-	
-	/**
-	 * Default contructor.
-	 */
-	public TesseractOCRConfig() {
-		init(this.getClass().getResourceAsStream("TesseractOCRConfig.properties"));
-	}
-
-	/**
-	 * Loads properties from InputStream and then tries to close InputStream.
-	 * If there is an IOException, this silently swallows the exception
-	 * and goes back to the default.
-	 *
-	 * @param is
-	 */
-	public TesseractOCRConfig(InputStream is) {
-		init(is);
-	}
-
-	private void init(InputStream is) {
-		if (is == null) {
-			return;
-		}
-		Properties props = new Properties();
-		try {
-			props.load(is);
-		} catch (IOException e) {
-		} finally {
-			if (is != null) {
-				try {
-					is.close();
-				} catch (IOException e) {
-					//swallow
-				}
-			}
-		}
-
-		// set parameters for Tesseract
-		setTesseractPath(
-				getProp(props, "tesseractPath", getTesseractPath()));
+    // Language dictionary to be used.
+    private String language = "eng";
+
+    // Tesseract page segmentation mode.
+    private String pageSegMode = "1";
+
+    // Minimum file size to submit file to ocr.
+    private int minFileSizeToOcr = 0;
+
+    // Maximum file size to submit file to ocr.
+    private int maxFileSizeToOcr = Integer.MAX_VALUE;
+
+    // Maximum time (seconds) to wait for the ocring process termination
+    private int timeout = 120;
+
+    // The format of the ocr'ed output to be returned, txt or hocr.
+    private OUTPUT_TYPE outputType = OUTPUT_TYPE.TXT;
+
+    // enable image processing (optional)
+    private int enableImageProcessing = 0;
+
+    // Path to ImageMagick program, if not on system path.
+    private String ImageMagickPath = "";
+
+    // resolution of processed image (in dpi).
+    private int density = 300;
+
+    // number of bits in a color sample within a pixel.
+    private int depth = 4;
+
+    // colorspace of processed image.
+    private String colorspace = "gray";
+
+    // filter to be applied to the processed image.
+    private String filter = "triangle";
+
+    // factor by which image is to be scaled.
+    private int resize = 900;
+
+    /**
+     * Default contructor.
+     */
+    public TesseractOCRConfig() {
+        init(this.getClass().getResourceAsStream("TesseractOCRConfig.properties"));
+    }
+
+    /**
+     * Loads properties from InputStream and then tries to close InputStream.
+     * If there is an IOException, this silently swallows the exception
+     * and goes back to the default.
+     *
+     * @param is
+     */
+    public TesseractOCRConfig(InputStream is) {
+        init(is);
+    }
+
+    private void init(InputStream is) {
+        if (is == null) {
+            return;
+        }
+        Properties props = new Properties();
+        try {
+            props.load(is);
+        } catch (IOException e) {
+        } finally {
+            if (is != null) {
+                try {
+                    is.close();
+                } catch (IOException e) {
+                    //swallow
+                }
+            }
+        }
+
+        // set parameters for Tesseract
+        setTesseractPath(
+                getProp(props, "tesseractPath", getTesseractPath()));
         setTessdataPath(
                 getProp(props, "tessdataPath", getTessdataPath()));
-		setLanguage(
-				getProp(props, "language", getLanguage()));
-		setPageSegMode(
-				getProp(props, "pageSegMode", getPageSegMode()));
-		setMinFileSizeToOcr(
-				getProp(props, "minFileSizeToOcr", getMinFileSizeToOcr()));
-		setMaxFileSizeToOcr(
-				getProp(props, "maxFileSizeToOcr", getMaxFileSizeToOcr()));
-		setTimeout(
+        setLanguage(
+                getProp(props, "language", getLanguage()));
+        setPageSegMode(
+                getProp(props, "pageSegMode", getPageSegMode()));
+        setMinFileSizeToOcr(
+                getProp(props, "minFileSizeToOcr", getMinFileSizeToOcr()));
+        setMaxFileSizeToOcr(
+                getProp(props, "maxFileSizeToOcr", getMaxFileSizeToOcr()));
+        setTimeout(
                 getProp(props, "timeout", getTimeout()));
-		String outputTypeString = props.getProperty("outputType");
-		if ("txt".equals(outputTypeString)) {
-			setOutputType(OUTPUT_TYPE.TXT);
-		} else if ("hocr".equals(outputTypeString)) {
-			setOutputType(OUTPUT_TYPE.HOCR);
-		}
-
-		// set parameters for ImageMagick
-		setEnableImageProcessing(
-				getProp(props, "enableImageProcessing", isEnableImageProcessing()));
-		setImageMagickPath(
-				getProp(props, "ImageMagickPath", getImageMagickPath()));
-		setDensity(
-				getProp(props, "density", getDensity()));
-		setDepth(
-				getProp(props, "depth", getDepth()));
-		setColorspace(
-				getProp(props, "colorspace", getColorspace()));
-		setFilter(
-				getProp(props, "filter", getFilter()));
-		setResize(
-				getProp(props, "resize", getResize()));
-
-	}
-
-	/** @see #setTesseractPath(String tesseractPath)*/
-	public String getTesseractPath() {
-		return tesseractPath;
-	}
-
-	/**
-	 * Set the path to the Tesseract executable, needed if it is not on system path.
+        String outputTypeString = props.getProperty("outputType");
+        if ("txt".equals(outputTypeString)) {
+            setOutputType(OUTPUT_TYPE.TXT);
+        } else if ("hocr".equals(outputTypeString)) {
+            setOutputType(OUTPUT_TYPE.HOCR);
+        }
+
+        // set parameters for ImageMagick
+        setEnableImageProcessing(
+                getProp(props, "enableImageProcessing", isEnableImageProcessing()));
+        setImageMagickPath(
+                getProp(props, "ImageMagickPath", getImageMagickPath()));
+        setDensity(
+                getProp(props, "density", getDensity()));
+        setDepth(
+                getProp(props, "depth", getDepth()));
+        setColorspace(
+                getProp(props, "colorspace", getColorspace()));
+        setFilter(
+                getProp(props, "filter", getFilter()));
+        setResize(
+                getProp(props, "resize", getResize()));
+
+    }
+
+    /**
+     * @see #setTesseractPath(String tesseractPath)
+     */
+    public String getTesseractPath() {
+        return tesseractPath;
+    }
+
+    /**
+     * Set the path to the Tesseract executable, needed if it is not on system path.
      * <p>
      * Note that if you set this value, it is highly recommended that you also
      * set the path to the 'tessdata' folder using {@link #setTessdataPath}.
      * </p>
-	 */
-	public void setTesseractPath(String tesseractPath) {
-		if(!tesseractPath.isEmpty() && !tesseractPath.endsWith(File.separator))
-			tesseractPath += File.separator;
+     */
+    public void setTesseractPath(String tesseractPath) {
+        if (!tesseractPath.isEmpty() && !tesseractPath.endsWith(File.separator))
+            tesseractPath += File.separator;
 
-		this.tesseractPath = tesseractPath;
-	}
+        this.tesseractPath = tesseractPath;
+    }
 
-    /** @see #setTessdataPath(String tessdataPath) */
+    /**
+     * @see #setTessdataPath(String tessdataPath)
+     */
     public String getTessdataPath() {
         return tessdataPath;
     }
@@ -198,265 +201,284 @@ public class TesseractOCRConfig implements Serializable{
      * (such as when Tesseract is built from source), it may be located elsewhere.
      */
     public void setTessdataPath(String tessdataPath) {
-        if(!tessdataPath.isEmpty() && !tessdataPath.endsWith(File.separator))
+        if (!tessdataPath.isEmpty() && !tessdataPath.endsWith(File.separator))
             tessdataPath += File.separator;
 
         this.tessdataPath = tessdataPath;
     }
 
-	/** @see #setLanguage(String language)*/
-	public String getLanguage() {
-		return language;
-	}
-
-	/**
-	 * Set tesseract language dictionary to be used. Default is "eng".
-	 * Multiple languages may be specified, separated by plus characters.
-	 */
-	public void setLanguage(String language) {
-		if (!language.matches("([A-Za-z](\\+?))*")) {
-			throw new IllegalArgumentException("Invalid language code");
-		}
-		this.language = language;
-	}
-
-	/** @see #setPageSegMode(String pageSegMode)*/
-	public String getPageSegMode() {
-		return pageSegMode;
-	}
-
-	/**
-	 * Set tesseract page segmentation mode.
-	 * Default is 1 = Automatic page segmentation with OSD (Orientation and Script Detection)
-	 */
-	public void setPageSegMode(String pageSegMode) {
-		if (!pageSegMode.matches("[1-9]|10")) {
-			throw new IllegalArgumentException("Invalid language code");
-		}
-		this.pageSegMode = pageSegMode;
-	}
-
-	/** @see #setMinFileSizeToOcr(int minFileSizeToOcr)*/
-	public int getMinFileSizeToOcr() {
-		return minFileSizeToOcr;
-	}
-
-	/**
-	 * Set minimum file size to submit file to ocr.
-	 * Default is 0.
-	 */
-	public void setMinFileSizeToOcr(int minFileSizeToOcr) {
-		this.minFileSizeToOcr = minFileSizeToOcr;
-	}
-
-	/** @see #setMaxFileSizeToOcr(int maxFileSizeToOcr)*/
-	public int getMaxFileSizeToOcr() {
-		return maxFileSizeToOcr;
-	}
-
-	/**
-	 * Set maximum file size to submit file to ocr.
-	 * Default is Integer.MAX_VALUE.
-	 */
-	public void setMaxFileSizeToOcr(int maxFileSizeToOcr) {
-		this.maxFileSizeToOcr = maxFileSizeToOcr;
-	}
-
-	/**
-	 * Set maximum time (seconds) to wait for the ocring process to terminate.
-	 * Default value is 120s.
-	 */
-	public void setTimeout(int timeout) {
-		this.timeout = timeout;
-	}
-
-	/** @see #setTimeout(int timeout)
-	 * @return timeout value for Tesseract */
-	public int getTimeout() {
-		return timeout;
-	}	
-	
-	/**
-	 * Set output type from ocr process.  Default is "txt", but can be "hocr".
-	 * Default value is 120s.
-	 */
-	public void setOutputType(OUTPUT_TYPE outputType) {
-		this.outputType = outputType;
-	}
-
-	/** @see #setOutputType(OUTPUT_TYPE outputType) */
-	public OUTPUT_TYPE getOutputType() {
-		return outputType;
-	}	
-
-	/** @see #setEnableImageProcessing(int)
-	 * @return image processing is enabled or not */
-	public int isEnableImageProcessing() {
-		return enableImageProcessing;
-	}
-
-	/** 
-	 * Set the value to true if processing is to be enabled.
-	 * Default value is false.
-	 */
-	public void setEnableImageProcessing(int enableImageProcessing) {
-		this.enableImageProcessing = enableImageProcessing;
-	}
-
-	/**
-	 * @return the density
-	 */
-	public int getDensity() {
-		return density;
-	}
-
-	/**
-	 * @param density the density to set. Valid range of values is 150-1200.
-	 * Default value is 300.
-	 */
-	public void setDensity(int density) {
-		if(density < 150 || density > 1200) {
-			throw new IllegalArgumentException("Invalid density value. Valid range of values is 150-1200.");
-		}
-		this.density = density;
-	}
-
-	/**
-	 * @return the depth
-	 */
-	public int getDepth() {
-		return depth;
-	}
-
-	/**
-	 * @param depth the depth to set. Valid values are 2, 4, 8, 16, 32, 64, 256, 4096.
-	 * Default value is 4.
-	 */
-	public void setDepth(int depth) {
-		int[] allowedValues = {2, 4, 8, 16, 32, 64, 256, 4096};
-		for (int i = 0; i < allowedValues.length; i++) {
-			if(depth == allowedValues[i]) {
-				this.depth = depth;
-				return;
-			}
-		}
-		throw new IllegalArgumentException("Invalid depth value. Valid values are 2, 4, 8, 16, 32, 64, 256, 4096.");
-	}
-
-	/**
-	 * @return the colorspace
-	 */
-	public String getColorspace() {
-		return colorspace;
-	}
-
-	/**
-	 * @param colorspace the colorspace to set
-	 * Deafult value is gray.
-	 */
-	public void setColorspace(String colorspace) {
-		if(!colorspace.equals(null)) {
-			this.colorspace = colorspace;
-		} else {
-			throw new IllegalArgumentException("Colorspace value cannot be null.");
-		}
-	}
-
-	/**
-	 * @return the filter
-	 */
-	public String getFilter() {
-		return filter;
-	}
-
-	/**
-	 * @param filter the filter to set. Valid values are point, hermite, cubic, box, gaussian, catrom, triangle, quadratic and mitchell.
-	 * Default value is triangle.
-	 */
-	public void setFilter(String filter) {
-		if(filter.equals(null)) {
-			throw new IllegalArgumentException("Filter value cannot be null. Valid values are point, hermite, "
-					+ "cubic, box, gaussian, catrom, triangle, quadratic and mitchell.");
-		}
-		
-		String[] allowedFilters = {"Point", "Hermite", "Cubic", "Box", "Gaussian", "Catrom", "Triangle", "Quadratic", "Mitchell"};
-		for (int i = 0; i < allowedFilters.length; i++) {
-			if(filter.equalsIgnoreCase(allowedFilters[i])) {
-				this.filter = filter;
-				return;
-			}
-		}
-		throw new IllegalArgumentException("Invalid filter value. Valid values are point, hermite, "
-					+ "cubic, box, gaussian, catrom, triangle, quadratic and mitchell.");
-	}
-
-	/**
-	 * @return the resize
-	 */
-	public int getResize() {
-		return resize;
-	}
-
-	/**
-	 * @param resize the resize to set. Valid range of values is 100-900.
-	 * Default value is 900.
-	 */
-	public void setResize(int resize) {
-		for(int i=1;i<10;i++) {
-			if(resize == i*100) {
-				this.resize = resize;
-				return;
-			}
-		}
-		throw new IllegalArgumentException("Invalid resize value. Valid range of values is 100-900.");
-	}
-
-	/** @see #setImageMagickPath(String ImageMagickPath)
-	 * @return path to ImageMagick file. */
-	public String getImageMagickPath() {
-		
-		return ImageMagickPath;
-	}
-	
-	/**
-	 * Set the path to the ImageMagick executable, needed if it is not on system path.
-	 * @param ImageMagickPath to ImageMagick file.
-	 */
-	public void setImageMagickPath(String ImageMagickPath) {
-		if(!ImageMagickPath.isEmpty() && !ImageMagickPath.endsWith(File.separator))
-			ImageMagickPath += File.separator;
-		
-		this.ImageMagickPath = ImageMagickPath;
-	}
-	
-	/**
-	 * Get property from the properties file passed in.
-	 * @param properties properties file to read from.
-	 * @param property the property to fetch.
-	 * @param defaultMissing default parameter to use.
-	 * @return the value.
-	 */
-	private int getProp(Properties properties, String property, int defaultMissing) {
-		String p = properties.getProperty(property);
-		if (p == null || p.isEmpty()){
-			return defaultMissing;
-		}
-		try {
-			return Integer.parseInt(p);
-		} catch (Throwable ex) {
-			throw new RuntimeException(String.format(Locale.ROOT, "Cannot parse TesseractOCRConfig variable %s, invalid integer value",
-					property), ex);
-		}
-	}
-
-	/**
-	 * Get property from the properties file passed in.
-	 * @param properties properties file to read from.
-	 * @param property the property to fetch.
-	 * @param defaultMissing default parameter to use.
-	 * @return the value.
-	 */
-	private String getProp(Properties properties, String property, String defaultMissing) {
-		return properties.getProperty(property, defaultMissing);
-	}
+    /**
+     * @see #setLanguage(String language)
+     */
+    public String getLanguage() {
+        return language;
+    }
+
+    /**
+     * Set tesseract language dictionary to be used. Default is "eng".
+     * Multiple languages may be specified, separated by plus characters.
+     */
+    public void setLanguage(String language) {
+        if (!language.matches("([A-Za-z](\\+?))*")) {
+            throw new IllegalArgumentException("Invalid language code");
+        }
+        this.language = language;
+    }
+
+    /**
+     * @see #setPageSegMode(String pageSegMode)
+     */
+    public String getPageSegMode() {
+        return pageSegMode;
+    }
+
+    /**
+     * Set tesseract page segmentation mode.
+     * Default is 1 = Automatic page segmentation with OSD (Orientation and Script Detection)
+     */
+    public void setPageSegMode(String pageSegMode) {
+        if (!pageSegMode.matches("[1-9]|10")) {
+            throw new IllegalArgumentException("Invalid language code");
+        }
+        this.pageSegMode = pageSegMode;
+    }
+
+    /**
+     * @see #setMinFileSizeToOcr(int minFileSizeToOcr)
+     */
+    public int getMinFileSizeToOcr() {
+        return minFileSizeToOcr;
+    }
+
+    /**
+     * Set minimum file size to submit file to ocr.
+     * Default is 0.
+     */
+    public void setMinFileSizeToOcr(int minFileSizeToOcr) {
+        this.minFileSizeToOcr = minFileSizeToOcr;
+    }
+
+    /**
+     * @see #setMaxFileSizeToOcr(int maxFileSizeToOcr)
+     */
+    public int getMaxFileSizeToOcr() {
+        return maxFileSizeToOcr;
+    }
+
+    /**
+     * Set maximum file size to submit file to ocr.
+     * Default is Integer.MAX_VALUE.
+     */
+    public void setMaxFileSizeToOcr(int maxFileSizeToOcr) {
+        this.maxFileSizeToOcr = maxFileSizeToOcr;
+    }
+
+    /**
+     * Set maximum time (seconds) to wait for the ocring process to terminate.
+     * Default value is 120s.
+     */
+    public void setTimeout(int timeout) {
+        this.timeout = timeout;
+    }
+
+    /**
+     * @return timeout value for Tesseract
+     * @see #setTimeout(int timeout)
+     */
+    public int getTimeout() {
+        return timeout;
+    }
+
+    /**
+     * Set output type from ocr process.  Default is "txt", but can be "hocr".
+     * Default value is 120s.
+     */
+    public void setOutputType(OUTPUT_TYPE outputType) {
+        this.outputType = outputType;
+    }
+
+    /**
+     * @see #setOutputType(OUTPUT_TYPE outputType)
+     */
+    public OUTPUT_TYPE getOutputType() {
+        return outputType;
+    }
+
+    /**
+     * @return image processing is enabled or not
+     * @see #setEnableImageProcessing(int)
+     */
+    public int isEnableImageProcessing() {
+        return enableImageProcessing;
+    }
+
+    /**
+     * Set the value to true if processing is to be enabled.
+     * Default value is false.
+     */
+    public void setEnableImageProcessing(int enableImageProcessing) {
+        this.enableImageProcessing = enableImageProcessing;
+    }
+
+    /**
+     * @return the density
+     */
+    public int getDensity() {
+        return density;
+    }
+
+    /**
+     * @param density the density to set. Valid range of values is 150-1200.
+     *                Default value is 300.
+     */
+    public void setDensity(int density) {
+        if (density < 150 || density > 1200) {
+            throw new IllegalArgumentException("Invalid density value. Valid range of values is 150-1200.");
+        }
+        this.density = density;
+    }
+
+    /**
+     * @return the depth
+     */
+    public int getDepth() {
+        return depth;
+    }
+
+    /**
+     * @param depth the depth to set. Valid values are 2, 4, 8, 16, 32, 64, 256, 4096.
+     *              Default value is 4.
+     */
+    public void setDepth(int depth) {
+        int[] allowedValues = {2, 4, 8, 16, 32, 64, 256, 4096};
+        for (int i = 0; i < allowedValues.length; i++) {
+            if (depth == allowedValues[i]) {
+                this.depth = depth;
+                return;
+            }
+        }
+        throw new IllegalArgumentException("Invalid depth value. Valid values are 2, 4, 8, 16, 32, 64, 256, 4096.");
+    }
+
+    /**
+     * @return the colorspace
+     */
+    public String getColorspace() {
+        return colorspace;
+    }
+
+    /**
+     * @param colorspace the colorspace to set
+     *                   Deafult value is gray.
+     */
+    public void setColorspace(String colorspace) {
+        if (!colorspace.equals(null)) {
+            this.colorspace = colorspace;
+        } else {
+            throw new IllegalArgumentException("Colorspace value cannot be null.");
+        }
+    }
+
+    /**
+     * @return the filter
+     */
+    public String getFilter() {
+        return filter;
+    }
+
+    /**
+     * @param filter the filter to set. Valid values are point, hermite, cubic, box, gaussian, catrom, triangle, quadratic and mitchell.
+     *               Default value is triangle.
+     */
+    public void setFilter(String filter) {
+        if (filter.equals(null)) {
+            throw new IllegalArgumentException("Filter value cannot be null. Valid values are point, hermite, "
+                    + "cubic, box, gaussian, catrom, triangle, quadratic and mitchell.");
+        }
+
+        String[] allowedFilters = {"Point", "Hermite", "Cubic", "Box", "Gaussian", "Catrom", "Triangle", "Quadratic", "Mitchell"};
+        for (int i = 0; i < allowedFilters.length; i++) {
+            if (filter.equalsIgnoreCase(allowedFilters[i])) {
+                this.filter = filter;
+                return;
+            }
+        }
+        throw new IllegalArgumentException("Invalid filter value. Valid values are point, hermite, "
+                + "cubic, box, gaussian, catrom, triangle, quadratic and mitchell.");
+    }
+
+    /**
+     * @return the resize
+     */
+    public int getResize() {
+        return resize;
+    }
+
+    /**
+     * @param resize the resize to set. Valid range of values is 100-900.
+     *               Default value is 900.
+     */
+    public void setResize(int resize) {
+        for (int i = 1; i < 10; i++) {
+            if (resize == i * 100) {
+                this.resize = resize;
+                return;
+            }
+        }
+        throw new IllegalArgumentException("Invalid resize value. Valid range of values is 100-900.");
+    }
+
+    /**
+     * @return path to ImageMagick file.
+     * @see #setImageMagickPath(String ImageMagickPath)
+     */
+    public String getImageMagickPath() {
+
+        return ImageMagickPath;
+    }
+
+    /**
+     * Set the path to the ImageMagick executable, needed if it is not on system path.
+     *
+     * @param ImageMagickPath to ImageMagick file.
+     */
+    public void setImageMagickPath(String ImageMagickPath) {
+        if (!ImageMagickPath.isEmpty() && !ImageMagickPath.endsWith(File.separator))
+            ImageMagickPath += File.separator;
+
+        this.ImageMagickPath = ImageMagickPath;
+    }
+
+    /**
+     * Get property from the properties file passed in.
+     *
+     * @param properties     properties file to read from.
+     * @param property       the property to fetch.
+     * @param defaultMissing default parameter to use.
+     * @return the value.
+     */
+    private int getProp(Properties properties, String property, int defaultMissing) {
+        String p = properties.getProperty(property);
+        if (p == null || p.isEmpty()) {
+            return defaultMissing;
+        }
+        try {
+            return Integer.parseInt(p);
+        } catch (Throwable ex) {
+            throw new RuntimeException(String.format(Locale.ROOT, "Cannot parse TesseractOCRConfig variable %s, invalid integer value",
+                    property), ex);
+        }
+    }
+
+    /**
+     * Get property from the properties file passed in.
+     *
+     * @param properties     properties file to read from.
+     * @param property       the property to fetch.
+     * @param defaultMissing default parameter to use.
+     * @return the value.
+     */
+    private String getProp(Properties properties, String property, String defaultMissing) {
+        return properties.getProperty(property, defaultMissing);
+    }
 }