mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-23 22:16:28 +00:00
251 lines
7.1 KiB
Java
251 lines
7.1 KiB
Java
/*
|
|
* $Id: PDFFont.java,v 1.3 2007/08/26 19:00:11 gil1 Exp $
|
|
*
|
|
* $Date: 2007/08/26 19:00:11 $
|
|
*
|
|
* 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
|
|
*/
|
|
package gnu.jpdf;
|
|
|
|
import java.awt.Font;
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.io.Serializable;
|
|
|
|
/**
|
|
* This class defines a font within a PDF document.
|
|
*
|
|
* @author Peter T Mount,http://www.retep.org.uk/pdf/
|
|
* @author Eric Z. Beard, ericzbeard@hotmail.com
|
|
* @author Gilbert DeLeeuw, gil1@users.sourceforge.net
|
|
* @version $Revision: 1.3 $, $Date: 2007/08/26 19:00:11 $
|
|
*/
|
|
public class PDFFont extends PDFObject implements Serializable {
|
|
|
|
/*
|
|
* NOTE: The original class is the work of Peter T. Mount, who released it
|
|
* in the uk.org.retep.pdf package. It was modified by Eric Z. Beard as
|
|
* follows:
|
|
* The package name was changed to gnu.pdf.
|
|
* The formatting was changed a little bit
|
|
* It is still licensed under the LGPL.
|
|
*/
|
|
/**
|
|
* The PDF document name of the font
|
|
*/
|
|
private String name;
|
|
|
|
/**
|
|
* The PDF type of the font, usually /Type1
|
|
*/
|
|
private String type;
|
|
|
|
/**
|
|
* The font's real name
|
|
*/
|
|
private String font;
|
|
|
|
/**
|
|
* The name of the equivalent Java font
|
|
*/
|
|
private String javaFont;
|
|
|
|
/**
|
|
* The PDF Style, ie: BOLD, ITALIC, etc
|
|
*/
|
|
private int style;
|
|
|
|
/**
|
|
* This constructs a default PDFFont. In this case Helvetica
|
|
*/
|
|
protected PDFFont() {
|
|
this("/F1", "/Type1", "Helvetica", Font.PLAIN);
|
|
}
|
|
|
|
/**
|
|
* Constructs a PDFFont. This will attempt to map the font from a known Java
|
|
* font name to that in PDF, defaulting to Helvetica if not possible.
|
|
*
|
|
* @param name The document name, ie /F1
|
|
* @param type The pdf type, ie /Type1
|
|
* @param font The font name, ie Helvetica
|
|
* @param style The java.awt.Font style, ie: Font.PLAIN
|
|
*/
|
|
public PDFFont(String name, String type, String font, int style) {
|
|
super("/Font");
|
|
this.name = name;
|
|
this.type = type;
|
|
this.style = style;
|
|
|
|
String f = font.toLowerCase();
|
|
|
|
// default PDF Font name
|
|
// this.font = base14[0][1];
|
|
// this.javaFont = base14[0][0];
|
|
this.font = font;
|
|
this.javaFont = "/" + font;
|
|
|
|
// attempt to translate the font name from Java to PDF
|
|
for (int i = 0; i < base14.length; i++) {
|
|
if (base14[i][0].equals(f)) {
|
|
this.javaFont = base14[i][0];
|
|
this.font = base14[i][1 + style];
|
|
//System.out.println("Setting a font style to: " + this.font);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This is the most common method to use.
|
|
*
|
|
* @return the Font name within the PDF document.
|
|
*/
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
/**
|
|
* @return the Font's PDF type
|
|
*/
|
|
@Override
|
|
public String getType() {
|
|
return type;
|
|
}
|
|
|
|
/**
|
|
* @return The PDF Font name
|
|
*/
|
|
public String getFont() {
|
|
return font;
|
|
}
|
|
|
|
/**
|
|
* @return the font style.
|
|
* @see java.awt.Font
|
|
*/
|
|
public int getStyle() {
|
|
return style;
|
|
}
|
|
|
|
/**
|
|
* @param os OutputStream to send the object to
|
|
* @exception IOException on error
|
|
*/
|
|
@Override
|
|
public void write(OutputStream os) throws IOException {
|
|
// Write the object header
|
|
writeStart(os);
|
|
|
|
// now the objects body
|
|
os.write("/Subtype ".getBytes("UTF-8"));
|
|
os.write(type.getBytes("UTF-8"));
|
|
os.write("\n/Name ".getBytes("UTF-8"));
|
|
os.write(name.getBytes("UTF-8"));
|
|
os.write("\n/BaseFont ".getBytes("UTF-8"));
|
|
os.write(font.getBytes("UTF-8"));
|
|
// The performance problem in Bug#106693 comments out the
|
|
// encoding line, and removes the /WinAnsiEncoding. I'm going
|
|
// to leave them in, as the Encoding fixes another problem.
|
|
os.write("\n/Encoding ".getBytes("UTF-8"));
|
|
os.write("/WinAnsiEncoding".getBytes("UTF-8"));
|
|
//os.write(encoding.getBytes("UTF-8"));
|
|
os.write("\n".getBytes("UTF-8"));
|
|
|
|
// finish off with its footer
|
|
writeEnd(os);
|
|
}
|
|
|
|
/**
|
|
* This is used by the PDF and PDFPage classes to compare font names
|
|
*
|
|
* @param type The pdf type, ie /Type1
|
|
* @param font The font name, ie Helvetica
|
|
* @param style The java.awt.Font style, ie: Font.PLAIN
|
|
* @return true if this object is identical to this font's spec
|
|
*/
|
|
protected boolean equals(String type, String font, int style) {
|
|
return this.type.equals(type)
|
|
&& (this.font.equalsIgnoreCase(font)
|
|
|| this.javaFont.equalsIgnoreCase(font));
|
|
// new styles not being picked up - ezb june 6 2001
|
|
// || this.javaFont.equalsIgnoreCase(font));
|
|
|
|
// Removed in fix for Bug#106693
|
|
//why? - ezb - can't find bug in bug tracker
|
|
//&& this.style==style;
|
|
}
|
|
|
|
/**
|
|
* This maps the standard JDK1.1 font names and styles to the base 14 PDF
|
|
* fonts
|
|
*/
|
|
private static String[][] base14 = {
|
|
// java name
|
|
// NORMAL
|
|
// BOLD
|
|
// ITALIC
|
|
// BOLD+ITALIC
|
|
{
|
|
"arial",
|
|
"/Helvetica",
|
|
"/Helvetica-Bold",
|
|
"/Helvetica-Oblique",
|
|
"/Helvetica-BoldOblique"},
|
|
{
|
|
"sansserif",
|
|
"/Helvetica",
|
|
"/Helvetica-Bold",
|
|
"/Helvetica-Oblique",
|
|
"/Helvetica-BoldOblique"},
|
|
{
|
|
"monospaced",
|
|
"/Courier",
|
|
"/Courier-Bold",
|
|
"/Courier-Oblique",
|
|
"/Courier-BoldOblique"},
|
|
{
|
|
"timesroman",
|
|
"/Times-Roman",
|
|
"/Times-Bold",
|
|
"/Times-Italic",
|
|
"/Times-BoldItalic"},
|
|
{
|
|
"courier",
|
|
"/Courier",
|
|
"/Courier-Bold",
|
|
"/Courier-Oblique",
|
|
"/Courier-BoldOblique"},
|
|
{
|
|
"helvetica",
|
|
"/Helvetica",
|
|
"/Helvetica-Bold",
|
|
"/Helvetica-Oblique",
|
|
"/Helvetica-BoldOblique"},
|
|
{
|
|
"dialog",
|
|
"/Courier",
|
|
"/Courier-Bold",
|
|
"/Courier-Oblique",
|
|
"/Courier-BoldOblique"},
|
|
{
|
|
"dialoginput",
|
|
"/Courier",
|
|
"/Courier-Bold",
|
|
"/Courier-Oblique",
|
|
"/Courier-BoldOblique"},};
|
|
|
|
}
|