123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /* $Id$ */
-
- package org.apache.fop.pdf;
-
- // Java
- import java.util.Collections;
- import java.util.Set;
-
- /**
- * Class representing an /Encoding object.
- *
- * A small object expressing the base encoding name and
- * the differences from the base encoding.
- *
- * The three base encodings are given by their name.
- *
- * Encodings are specified in section 5.5.5 of the PDF 1.4 spec.
- */
- public class PDFEncoding extends PDFDictionary {
-
- /** the name for the standard encoding scheme */
- public static final String STANDARD_ENCODING = "StandardEncoding";
- /** the name for the Mac Roman encoding scheme */
- public static final String MAC_ROMAN_ENCODING = "MacRomanEncoding";
- /** the name for the Mac Export encoding scheme */
- public static final String MAC_EXPERT_ENCODING = "MacExpertEncoding";
- /** the name for the WinAnsi encoding scheme */
- public static final String WIN_ANSI_ENCODING = "WinAnsiEncoding";
- /** the name for the PDF document encoding scheme */
- public static final String PDF_DOC_ENCODING = "PDFDocEncoding";
-
- /** the set of predefined encodings that can be assumed present in a PDF viewer */
- private static final Set PREDEFINED_ENCODINGS;
-
- static {
- Set encodings = new java.util.HashSet();
- encodings.add(STANDARD_ENCODING);
- encodings.add(MAC_ROMAN_ENCODING);
- encodings.add(MAC_EXPERT_ENCODING);
- encodings.add(WIN_ANSI_ENCODING);
- encodings.add(PDF_DOC_ENCODING);
- PREDEFINED_ENCODINGS = Collections.unmodifiableSet(encodings);
- }
-
- /**
- * Create a new /Encoding object.
- *
- * @param basename the name of the character encoding schema
- */
- public PDFEncoding(String basename) {
- super();
-
- put("Type", new PDFName("Encoding"));
- if (basename != null) {
- put("BaseEncoding", new PDFName(basename));
- }
- }
-
- /**
- * Indicates whether a given encoding is one of the predefined encodings.
- * @param name the encoding name (ex. "StandardEncoding")
- * @return true if it is a predefined encoding
- */
- public static boolean isPredefinedEncoding(String name) {
- return PREDEFINED_ENCODINGS.contains(name);
- }
-
- /**
- * Creates and returns a new DifferencesBuilder instance for constructing the Differences
- * array.
- * @return the DifferencesBuilder
- */
- public DifferencesBuilder createDifferencesBuilder() {
- return new DifferencesBuilder();
- }
-
- /**
- * Sets the Differences value.
- * @param differences the differences.
- */
- public void setDifferences(PDFArray differences) {
- put("Differences", differences);
- }
-
- /**
- * Builder class for constructing the Differences array.
- */
- public class DifferencesBuilder {
-
- private PDFArray differences = new PDFArray();
- private int currentCode = -1;
-
- /**
- * Start a new difference.
- * @param code the starting code index inside the encoding
- * @return this builder instance
- */
- public DifferencesBuilder addDifference(int code) {
- this.currentCode = code;
- this.differences.add(new Integer(code));
- return this;
- }
-
- /**
- * Adds a character name to the current difference.
- * @param name the character name
- * @return this builder instance
- */
- public DifferencesBuilder addName(String name) {
- if (this.currentCode < 0) {
- throw new IllegalStateException("addDifference(int) must be called first");
- }
- this.differences.add(new PDFName(name));
- return this;
- }
-
- /**
- * Indicates whether any differences have been recorded.
- * @return true if there are differences.
- */
- public boolean hasDifferences() {
- return (this.differences.length() > 0);
- }
-
- /**
- * Creates and returns the PDFArray representing the Differences entry.
- * @return the Differences entry
- */
- public PDFArray toPDFArray() {
- return this.differences;
- }
- }
-
- /*
- * example (p. 214)
- * 25 0 obj
- * <<
- * /Type /Encoding
- * /Differences [39 /quotesingle 96 /grave 128
- * /Adieresis /Aring /Ccedilla /Eacute /Ntilde
- * /Odieresis /Udieresis /aacute /agrave]
- * >>
- * endobj
- */
- }
|