📄 reportconfiguration.java
字号:
/**
* ========================================
* JFreeReport : a free Java report library
* ========================================
*
* Project Info: http://www.jfree.org/jfreereport/index.html
* Project Lead: Thomas Morgner;
*
* (C) Copyright 2000-2003, by Simba Management Limited and Contributors.
*
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* ------------------------
* ReportConfiguration.java
* ------------------------
* (C)opyright 2002-2003, by Thomas Morgner and Contributors.
*
* Original Author: Thomas Morgner;
* Contributor(s): David Gilbert (for Simba Management Limited);
*
* $Id: ReportConfiguration.java,v 1.52.2.1 2003/08/24 14:18:14 taqua Exp $
*
* Changes
* -------
* 06-Nov-2002 : Initial release
* 12-Nov-2002 : Added Javadoc comments (DG);
* 29-Nov-2002 : Fixed bugs reported by CheckStyle (DG)
* 05-Dec-2002 : Documentation
*
*/
package com.jrefinery.report.util;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Properties;
import org.jfree.util.Configuration;
/**
* Global and local configurations for JFreeReport.
* <p>
* You can access the global configuration using this statement in your code:
* <p>
* <code>ReportConfiguration config = ReportConfiguration.getGlobalConfig();</code>
* <p>
* You can access the local configuration for a report using this:
* <p>
* <code>ReportConfiguration local = myReport.getReportConfiguration();
* <p>
* You can also specify the local configuration for a report via the XML report template file.
*
* <h3>Global Configuration keys</h3>
* <p>
* These keys affect the whole VM and usually cannot be changed once they are configured unless
* the VM is restarted.
* <p>
* <ul>
*
* <li><code>com.jrefinery.report.LogLevel</code>
* <p>
* The minimum loglevel that is logged. Valid values are:
* <ul>
* <li><code>"Error"</code> - prints error messages only;</li>
* <li><code>"Warn"</code> - prints warnings and errors;</li>
* <li><code>"Info"</code> - prints informational messages as well as warnings and errors;</li>
* <li><code>"Debug"</code> - prints all messages, including all debugging messages.</li>
* </ul>
* The default setting is <code>"Debug"</code>.
* <p>
* </li>
* <li><code>com.jrefinery.report.LogTarget</code>
* <p>
* The default log target. This should be set to the classname of a valid
* {@link org.jfree.util.LogTarget} implementation -- the given class is loaded and instantiated
* and added as the primary logging target. This defaults to
* <code>"com.jrefinery.report.util.SystemOutLogTarget"</code>.
* <p>
* An alternative {@link org.jfree.util.LogTarget} for Log4J output can be found in the
* "Extension" package.
* <p>
* <li><code>com.jrefinery.report.targets.PDFOutputTarget.AUTOINIT</code>
* <p>AutoInit the PDFTarget when the class is loaded? This will search and register
* all ttf-fonts on the system. The search will access the system-directorys and can
* therefore collide with the SecurityManager. The property defaults to "true", set
* to "false" to disable this feature and have a look at the PDFOutputTarget on how
* to register the fonts manually.
* <p>
* <li><code>com.jrefinery.report.dtd</code>
* <p>A URL to the JFreeReport-DTD if not specified in the Document itself. This can
* be used for validating parsers to check the xml-document. This property is not set
* by default, but the DTD can be found at "http://jfreereport.sourceforge.net/report.dtd".
* This property expects a string with a valid URL, like the one above.
* <p>
* <li><code>com.jrefinery.report.PrintOperationComment</code>
* <p>
* Should the logical page add comments to the generated PhysicalOperations? This is
* for debugging only and will cause heavy load on your LogTarget if enabled.
* This option defaults to "false".
*
* <li><code>com.jrefinery.report.WarnInvalidColumns</code>
* <p>Should the datarow print warning on invalid columns? Invalid column requests always
* return null, if set to "true", an additional logging entry is added for every invalid
* column. This is useful when writing report-definitions, so this option defaults to "true".
*
* <li><code>com.jrefinery.report.TableFactoryMode</code>
* <p>
* The table model factory mode for the
* {@link com.jrefinery.report.tablemodel.ResultSetTableModelFactory}.
* If set to "simple" the factory will always return a <code>DefaultTableModel</code>.
* This property is not set by default and it should not be necessary to change this.
*
* <li><code>com.jrefinery.report.NoDefaultDebug</code>
* <p>
* Should the debugging system be disabled by default. This option will suppress all
* output, no single line of debug information will be printed. If you want to remove
* System.out-debugging on the server side, try to switch to a Log4J-LogTarget instead.
* This option can be dangerous, as you won't see any error messages, so it is set to "false"
* by default.
* <p>
* </ul>
* <h3>Local configuration keys</h3>
* <p>The following keys can be redefined for all report-instances.
* <ul>
* <li><code>com.jrefinery.report.preview.PreferredWidth</code>
* <p>
* Defines a preferred size for the preview frame. Both width and height must be set,
* proportional values are allowed (100%, 90% etc). They have the same syntax as the
* proportional values in the xml definition.
* <p>
* None of the values is defined by default.
* <li><code>com.jrefinery.report.preview.PreferredHeight</code>
* <p>
* Defines a preferred size for the preview frame. Both width and height must be set,
* proportional values are allowed (100%, 90% etc). They have the same syntax as the
* proportional values in the xml definition.
* <p>
* None of the values is defined by default.
* <li><code>com.jrefinery.report.preview.MaximumWidth</code>
* <p>
* Defines the maximum width for the preview frame. If the width is defined, a component
* listener will be used to enforce the defined width.
* The value is not defined by default.
* <li><code>com.jrefinery.report.preview.MaximumHeight</code>
* Defines the maximum height for the preview frame. If the height is defined, a component
* listener will be used to enforce that value.
* The value is not defined by default.
* </ul>
* <p>
* <h4>PDFOutputTarget properties</h4>
* The PDFTarget can be configured using these properties. This will create a default configuration
* which can be altered by the programm using the usual operations.
* <ul>
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.Encoding
* <p>The default font-encoding for the OutputTarget. A PDF does not use UNICODE by default.
* Inside a PDF strings are stored with a specifiy byte-encoding, also known as CodePage
* for 8Bit encodings. The PDFOutputTarget uses the Java-VM to convert Java-Strings into
* encoded byte-sequences when printing text. The conversion is done via {@link String#getBytes}.
* <p>
* To print non-ascii characters, the string must be encoded with the correct encoding into
* a byte-sequence. Additionally the font, which should display the string on the target
* plattform has to support the given encoding, or the result will not be as expected.
* <p>
* To encode Strings which contain the 'Euro' symbol, use the encoding "iso-8859-15", for
* polish Strings, the encoding "iso-8859-2" is suitable. If you want to encode chinese
* characters, try "GB2312". A complete list of encodings can be found
* at <a href="http://www.iana.org/assignments/character-sets"
* >http://www.iana.org/assignments/character-sets</a>
* For a complete set of supported encodings, you will also need the international version
* of the JDK (the bigger one :)).
* <p>
* As thumb rule, try to write some of your target text in your favourite text processor.
* If the font you select there is a true-type-font and does display the text well, the font
* will be suitable for your report.
* <p>
* The default value can be changed with
* {@link com.jrefinery.report.targets.pageable.output.PDFOutputTarget#setFontEncoding}
* for a specific instance if needed.
* <p>
* If not defined otherwise, this property defaults to "Cp1252", the standard Windows-encoding.
* <p>
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.Author
* <p>Defines the Author of the PDF-Document. The author is written into the PDFMetaData.
* If not explicitly set, this property is ignored and no author is set.
* <p>
* </ul>
* <h3>A word to the PDF-Security flags</h3>
* PDFSecurity is only enabled, if the document is encrypted. Encryption itself will
* not protect the document from being modified, if no userpassword and/or ownerpassword
* is set for the document.
* <p>
* The <code>userpassword</code> will protect access to the document. If empty, everybody
* is able to read the document. The <code>ownerpassword</code> will protect access to the
* security settings of the document. If empty, everybody who is able to read the document,
* will also be able to change the security settings of the document (and so the document
* itself).
* If only the ownerpassword is set, everybody may read the document, but only the owner
* is able to fully access the documents security settings.
* <p>
* <ul>PDFSecurity settings
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.AllowPrinting
* <p>Should the PDF Security setting allow printing of the document by default.
* This property defaults to "false", no one may print the document.
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.AllowCopy
* <p>Should the PDF Security setting allow copying of the document's contents by default
* This property defaults to "false".
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.AllowModifyContents
* <p>Should the PDF Security setting allow modifying of the document by default.
* This property defaults to "false".
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.AllowModifyAnnotations
* <p>Should the PDF Security setting allow document annotations by default
* This property defaults to "false".
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.AllowFillIn
* <p>Should the PDF Security setting allow the fill-in of document forms (inputfields etc).
* This property defaults to "false".
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.AllowScreenReaders
* <p>Should the PDF Security setting allow access for screenreaders by default.
* ScreenReader may help blind people to read your document, but I may also open a gate for
* automated replication of your documents contents. As today every OCR program is also able to
* capture the contents of PDF-Files, it is safe to say "true" here to allow access for
* screenreaders.
* But as we are paranoid, this property defaults to "false" if not defined otherwise.
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.AllowAssembly
* Should the PDF Security setting allow re(assembly) of the document by default
* This property defaults to "false".
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.AllowDegradedPrinting
* <p>Should the PDF Security setting allow low quality printing of the document's contents by
* default
* If you disabled printing, this property defines whether the reader of your document may print
* a low-quality (draft) version of your document. If you enabled printing, the users right
* to print a high-quality version also includes the right to print the low-level version of the
* document. This setting defaults to "false".
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.Encryption
* <p>
* Should the PDF file be encrypted by default? Set to "none", "40bit", "128bit". In some
* countries the 128bit encoding may be illegal for use or export. If this property is set
* to "none", none of the other security properties are applied. Enabling security always
* involves encryption.
* <P>
* The 40bit encoding should not be used for securing sensitive data,
* a 40 bit key does not create any real barriers for interessed evil people out there.
* This property is not set by default, and is therefore treated as if it was set to "none".
* <p>
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.userpassword
* <b>Warning:</b>Specifying passwords in the property file can introduce a security risk.
* Do not use these properties on the client side or in unprotected (world-readable) server
* environments. In these cases use other means of defining the password. Any unsecured
* access to the "jfreereport.properties" file would cause a security leak, if you store
* clear-text passwords there.
* <p>
* The userpassword protects global access to your document. This property is not set by default.
* This property should be set to a non-null value to enable the security of the document.
* <p>
* <li>com.jrefinery.report.targets.pageable.output.PDFOutputTarget.default.ownerpassword
* <p>
* The ownerpassword protects access to the security settings of the document. A user with
* owner-access has all permissions to modify the contents and settings of the document.
* This property is not set by default.
* This property should be set to a non-null value to enable the security of the document.
* </ul>
*
* @author Thomas Morgner
*/
public class ReportConfiguration implements Configuration, Serializable
{
/** The text aliasing configuration key. */
public static final String G2TARGET_USEALIASING
= "com.jrefinery.report.targets.G2OutputTarget.useAliasing";
/** The text aliasing configuration default value. Is "false". */
public static final String G2TARGET_USEALIASING_DEFAULT = "false";
/** The G2 fontrenderer bug override configuration key. */
public static final String G2TARGET_ISBUGGY_FRC
= "com.jrefinery.report.targets.G2OutputTarget.isBuggyFRC";
/** The G2 fontrenderer bug override. Is "false". */
public static final String G2TARGET_ISBUGGY_FRC_DEFAULT = "false";
/** The preferred width key. */
public static final String PREVIEW_PREFERRED_WIDTH
= "com.jrefinery.report.preview.PreferredWidth";
/** The preferred height key. */
public static final String PREVIEW_PREFERRED_HEIGHT
= "com.jrefinery.report.preview.PreferredHeight";
/** The maximum width key. */
public static final String PREVIEW_MAXIMUM_WIDTH
= "com.jrefinery.report.preview.MaximumWidth";
/** The maximum height key. */
public static final String PREVIEW_MAXIMUM_HEIGHT
= "com.jrefinery.report.preview.MaximumHeight";
/** The 'disable logging' property key. */
public static final String PRINT_OPERATION_COMMENT
= "com.jrefinery.report.PrintOperationComment";
/** The default 'disable logging' property value. */
public static final String PRINT_OPERATION_COMMENT_DEFAULT = "false";
/** The 'disable logging' property key. */
public static final String STRICT_ERRORHANDLING
= "com.jrefinery.report.StrictErrorHandling";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -