com.itextpdf.text.pdf.PdfAppearance Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of itextpdf Show documentation
Show all versions of itextpdf Show documentation
iText, a free Java-PDF library
/*
*
* This file is part of the iText (R) project.
Copyright (c) 1998-2022 iText Group NV
* Authors: Bruno Lowagie, Paulo Soares, et al.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3
* as published by the Free Software Foundation with the addition of the
* following permission added to Section 15 as permitted in Section 7(a):
* FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY
* ITEXT GROUP. ITEXT GROUP DISCLAIMS THE WARRANTY OF NON INFRINGEMENT
* OF THIRD PARTY RIGHTS
*
* This program 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 Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, see http://www.gnu.org/licenses or write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA, 02110-1301 USA, or download the license from the following URL:
* http://itextpdf.com/terms-of-use/
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License.
*
* In accordance with Section 7(b) of the GNU Affero General Public License,
* a covered work must retain the producer line in every PDF that is created
* or manipulated using iText.
*
* You can be released from the requirements of the license by purchasing
* a commercial license. Buying such a license is mandatory as soon as you
* develop commercial activities involving the iText software without
* disclosing the source code of your own applications.
* These activities include: offering paid services to customers as an ASP,
* serving PDFs on the fly in a web application, shipping iText with a closed
* source product.
*
* For more information, please contact iText Software Corp. at this
* address: [email protected]
*/
package com.itextpdf.text.pdf;
import java.util.HashMap;
import com.itextpdf.text.Rectangle;
/**
* Implements the appearance stream to be used with form fields..
*/
public class PdfAppearance extends PdfTemplate {
public static final HashMap stdFieldFontNames = new HashMap();
static {
stdFieldFontNames.put("Courier-BoldOblique", new PdfName("CoBO"));
stdFieldFontNames.put("Courier-Bold", new PdfName("CoBo"));
stdFieldFontNames.put("Courier-Oblique", new PdfName("CoOb"));
stdFieldFontNames.put("Courier", new PdfName("Cour"));
stdFieldFontNames.put("Helvetica-BoldOblique", new PdfName("HeBO"));
stdFieldFontNames.put("Helvetica-Bold", new PdfName("HeBo"));
stdFieldFontNames.put("Helvetica-Oblique", new PdfName("HeOb"));
stdFieldFontNames.put("Helvetica", PdfName.HELV);
stdFieldFontNames.put("Symbol", new PdfName("Symb"));
stdFieldFontNames.put("Times-BoldItalic", new PdfName("TiBI"));
stdFieldFontNames.put("Times-Bold", new PdfName("TiBo"));
stdFieldFontNames.put("Times-Italic", new PdfName("TiIt"));
stdFieldFontNames.put("Times-Roman", new PdfName("TiRo"));
stdFieldFontNames.put("ZapfDingbats", PdfName.ZADB);
stdFieldFontNames.put("HYSMyeongJo-Medium", new PdfName("HySm"));
stdFieldFontNames.put("HYGoThic-Medium", new PdfName("HyGo"));
stdFieldFontNames.put("HeiseiKakuGo-W5", new PdfName("KaGo"));
stdFieldFontNames.put("HeiseiMin-W3", new PdfName("KaMi"));
stdFieldFontNames.put("MHei-Medium", new PdfName("MHei"));
stdFieldFontNames.put("MSung-Light", new PdfName("MSun"));
stdFieldFontNames.put("STSong-Light", new PdfName("STSo"));
stdFieldFontNames.put("MSungStd-Light", new PdfName("MSun"));
stdFieldFontNames.put("STSongStd-Light", new PdfName("STSo"));
stdFieldFontNames.put("HYSMyeongJoStd-Medium", new PdfName("HySm"));
stdFieldFontNames.put("KozMinPro-Regular", new PdfName("KaMi"));
}
/**
*Creates a PdfAppearance
.
*/
PdfAppearance() {
super();
separator = ' ';
}
PdfAppearance(PdfIndirectReference iref) {
thisReference = iref;
}
/**
* Creates new PdfTemplate
*
* @param wr the PdfWriter
*/
PdfAppearance(PdfWriter wr) {
super(wr);
separator = ' ';
}
/**
* Creates a new appearance to be used with form fields.
*
* @param writer the PdfWriter to use
* @param width the bounding box width
* @param height the bounding box height
* @return the appearance created
*/
public static PdfAppearance createAppearance(PdfWriter writer, float width, float height) {
return createAppearance(writer, width, height, null);
}
static PdfAppearance createAppearance(PdfWriter writer, float width, float height, PdfName forcedName) {
PdfAppearance template = new PdfAppearance(writer);
template.setWidth(width);
template.setHeight(height);
writer.addDirectTemplateSimple(template, forcedName);
return template;
}
/**
* Set the font and the size for the subsequent text writing.
*
* @param bf the font
* @param size the font size in points
*/
@Override
public void setFontAndSize(BaseFont bf, float size) {
checkWriter();
state.size = size;
if (bf.getFontType() == BaseFont.FONT_TYPE_DOCUMENT) {
state.fontDetails = new FontDetails(null, ((DocumentFont)bf).getIndirectReference(), bf);
}
else
state.fontDetails = writer.addSimple(bf);
PdfName psn = stdFieldFontNames.get(bf.getPostscriptFontName());
if (psn == null) {
if (bf.isSubset() && bf.getFontType() == BaseFont.FONT_TYPE_TTUNI)
psn = state.fontDetails.getFontName();
else {
psn = new PdfName(bf.getPostscriptFontName());
state.fontDetails.setSubset(false);
}
}
PageResources prs = getPageResources();
// PdfName name = state.fontDetails.getFontName();
prs.addFont(psn, state.fontDetails.getIndirectReference());
content.append(psn.getBytes()).append(' ').append(size).append(" Tf").append_i(separator);
}
@Override
public PdfContentByte getDuplicate() {
PdfAppearance tpl = new PdfAppearance();
tpl.writer = writer;
tpl.pdf = pdf;
tpl.thisReference = thisReference;
tpl.pageResources = pageResources;
tpl.bBox = new Rectangle(bBox);
tpl.group = group;
tpl.layer = layer;
if (matrix != null) {
tpl.matrix = new PdfArray(matrix);
}
tpl.separator = separator;
return tpl;
}
}