org.apache.fop.pdf.CMapBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.apache.fop Show documentation
Show all versions of org.apache.fop Show documentation
The core maven build properties
The newest version!
/*
* 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: CMapBuilder.java 1297404 2012-03-06 10:17:54Z vhennebert $ */
package org.apache.fop.pdf;
import java.io.IOException;
import java.io.Writer;
/** A cmap builder. */
public class CMapBuilder {
/** name */
protected String name;
/** writer */
protected Writer writer;
/**
* Construct cmap builder.
* @param writer a writer
* @param name a name
*/
public CMapBuilder(Writer writer, String name) {
this.writer = writer;
this.name = name;
}
/**
* Writes the CMap to a Writer.
* @throws IOException if an I/O error occurs
*/
public void writeCMap() throws IOException {
writePreStream();
writeStreamComments();
writeCIDInit();
writeCIDSystemInfo();
writeVersion("1");
writeType("1");
writeName(name);
writeCodeSpaceRange();
writeCIDRange();
writeBFEntries();
writeWrapUp();
writeStreamAfterComments();
writeUseCMap();
}
/** @throws IOException if i/o exception */
protected void writePreStream() throws IOException {
// writer.write("/Type /CMap\n");
// writer.write(sysInfo.toPDFString());
// writer.write("/CMapName /" + name + EOL);
}
/** @throws IOException if i/o exception */
protected void writeStreamComments() throws IOException {
writer.write("%!PS-Adobe-3.0 Resource-CMap\n");
writer.write("%%DocumentNeededResources: ProcSet (CIDInit)\n");
writer.write("%%IncludeResource: ProcSet (CIDInit)\n");
writer.write("%%BeginResource: CMap (" + name + ")\n");
writer.write("%%EndComments\n");
}
/** @throws IOException if i/o exception */
protected void writeCIDInit() throws IOException {
writer.write("/CIDInit /ProcSet findresource begin\n");
writer.write("12 dict begin\n");
writer.write("begincmap\n");
}
/**
* @param registry string
* @param ordering string
* @param supplement string
* @throws IOException if i/o exception
*/
protected void writeCIDSystemInfo(String registry, String ordering, int supplement)
throws IOException {
writer.write("/CIDSystemInfo 3 dict dup begin\n");
writer.write(" /Registry (");
writer.write(registry);
writer.write(") def\n");
writer.write(" /Ordering (");
writer.write(ordering);
writer.write(") def\n");
writer.write(" /Supplement ");
writer.write(Integer.toString(supplement));
writer.write(" def\n");
writer.write("end def\n");
}
/** @throws IOException if i/o exception */
protected void writeCIDSystemInfo() throws IOException {
writeCIDSystemInfo("Adobe", "Identity", 0);
}
/**
* @param version a version
* @throws IOException if i/o exception
*/
protected void writeVersion(String version) throws IOException {
writer.write("/CMapVersion ");
writer.write(version);
writer.write(" def\n");
}
/**
* @param type a type
* @throws IOException if i/o exception
*/
protected void writeType(String type) throws IOException {
writer.write("/CMapType ");
writer.write(type);
writer.write(" def\n");
}
/**
* @param name a name
* @throws IOException if i/o exception
*/
protected void writeName(String name) throws IOException {
writer.write("/CMapName /");
writer.write(name);
writer.write(" def\n");
}
/** @throws IOException if i/o exception */
protected void writeCodeSpaceRange() throws IOException {
writeCodeSpaceRange(false);
}
/**
* @param singleByte true if single byte range
* @throws IOException if i/o exception
*/
protected void writeCodeSpaceRange(boolean singleByte) throws IOException {
writer.write("1 begincodespacerange\n");
if (singleByte) {
writer.write("<00> \n");
} else {
writer.write("<0000> \n");
}
writer.write("endcodespacerange\n");
}
/** @throws IOException if i/o exception */
protected void writeCIDRange() throws IOException {
writer.write("1 begincidrange\n");
writer.write("<0000> 0\n");
writer.write("endcidrange\n");
}
/** @throws IOException if i/o exception */
protected void writeBFEntries() throws IOException {
// writer.write("1 beginbfrange\n");
// writer.write("<0020> <0100> <0000>\n");
// writer.write("endbfrange\n");
}
/** @throws IOException if i/o exception */
protected void writeWrapUp() throws IOException {
writer.write("endcmap\n");
writer.write("CMapName currentdict /CMap defineresource pop\n");
writer.write("end\n");
writer.write("end\n");
}
/** @throws IOException if i/o exception */
protected void writeStreamAfterComments() throws IOException {
writer.write("%%EndResource\n");
writer.write("%%EOF\n");
}
/** does nothing */
protected void writeUseCMap() {
/*
* writer.write(" /Type /CMap");
* writer.write("/CMapName /" + name + EOL);
* writer.write("/WMode " + wMode + EOL);
* if (base != null) {
* writer.write("/UseCMap ");
* if (base instanceof String) {
* writer.write("/"+base);
* } else {// base instanceof PDFStream
* writer.write(((PDFStream)base).referencePDF());
* }
* }
*/
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy