001/* ===================================================================== 002 * JFreePDF : a fast, light-weight PDF library for the Java(tm) platform 003 * ===================================================================== 004 * 005 * (C)opyright 2013-2022, by David Gilbert. All rights reserved. 006 * 007 * https://github.com/jfree/orsonpdf 008 * 009 * This program is free software: you can redistribute it and/or modify 010 * it under the terms of the GNU General Public License as published by 011 * the Free Software Foundation, either version 3 of the License, or 012 * (at your option) any later version. 013 * 014 * This program is distributed in the hope that it will be useful, 015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 017 * GNU General Public License for more details. 018 * 019 * You should have received a copy of the GNU General Public License 020 * along with this program. If not, see <http://www.gnu.org/licenses/>. 021 * 022 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates. 023 * Other names may be trademarks of their respective owners.] 024 * 025 * If you do not wish to be bound by the terms of the GPL, an alternative 026 * runtime license is available to JFree sponsors: 027 * 028 * https://github.com/sponsors/jfree 029 * 030 */ 031 032package org.jfree.pdf; 033 034import java.awt.RenderingHints; 035 036/** 037 * Defines the rendering hints that can be used with the {@link PDFGraphics2D} 038 * class. There is just one hint defined at present:<br> 039 * <ul> 040 * <li>{@link #KEY_DRAW_STRING_TYPE} that controls how the drawString() methods 041 * generate output (regular text or vector graphics);</li> 042 * </ul> 043 * 044 * @since 1.5 045 */ 046public final class PDFHints { 047 048 private PDFHints() { 049 // no need to instantiate this 050 } 051 052 /** 053 * The key for the hint that controls whether strings are rendered as 054 * characters (standard PDF output) or vector graphics (implemented using 055 * <code>TextLayout</code>). The latter will result in larger output files 056 * but permits rendering Unicode characters without font embedding (which is 057 * not supported by <strong>JFreePDF</strong> at this point). Valid hint 058 * values are {@link #VALUE_DRAW_STRING_TYPE_STANDARD} and 059 * {@link #VALUE_DRAW_STRING_TYPE_VECTOR}. 060 */ 061 public static final PDFHints.Key KEY_DRAW_STRING_TYPE = new PDFHints.Key(0); 062 063 /** 064 * Hint value for <code>KEY_DRAW_STRING_TYPE</code> to specify that strings 065 * should be written to the output using standard PDF text primitives. 066 */ 067 public static final Object VALUE_DRAW_STRING_TYPE_STANDARD 068 = "VALUE_DRAW_STRING_TYPE_STANDARD"; 069 070 /** 071 * Hint value for <code>KEY_DRAW_STRING_TYPE</code> to say that strings 072 * should be written to the output using vector graphics primitives. 073 */ 074 public static final Object VALUE_DRAW_STRING_TYPE_VECTOR 075 = "VALUE_DRAW_STRING_TYPE_VECTOR"; 076 077 /** 078 * A key for hints used by the {@link PDFGraphics2D} class. 079 */ 080 public static class Key extends RenderingHints.Key { 081 082 /** 083 * Creates a new instance with the specified key. 084 * 085 * @param privateKey the key. 086 */ 087 public Key(int privateKey) { 088 super(privateKey); 089 } 090 091 /** 092 * Returns {@code true} if {@code val} is a value that is 093 * compatible with this key, and {@code false} otherwise. 094 * 095 * @param val the value. 096 * 097 * @return A boolean. 098 */ 099 @Override 100 public boolean isCompatibleValue(Object val) { 101 switch (intKey()) { 102 case 0: 103 return val == null 104 || VALUE_DRAW_STRING_TYPE_STANDARD.equals(val) 105 || VALUE_DRAW_STRING_TYPE_VECTOR.equals(val); 106 default: 107 throw new RuntimeException("Not expected!"); 108 } 109 } 110 } 111 112}