📄 htmlwriter.java
字号:
write((Element)i.next(), indent + 1);
}
// end tag
addTabs(indent);
writeEnd(HtmlTags.DIV);
currentfont.pop();
return;
}
case Element.SECTION:
case Element.CHAPTER:
{
// part of the start tag + contents
writeSection((Section) element, indent);
return;
}
case Element.LIST:
{
List list = (List) element;
// start tag
addTabs(indent);
if (list.isNumbered()) {
writeStart(HtmlTags.ORDEREDLIST);
}
else {
writeStart(HtmlTags.UNORDEREDLIST);
}
writeMarkupAttributes(markup);
os.write(GT);
// contents
for (Iterator i = list.getItems().iterator(); i.hasNext(); ) {
write((Element) i.next(), indent + 1);
}
// end tag
addTabs(indent);
if (list.isNumbered()) {
writeEnd(HtmlTags.ORDEREDLIST);
}
else {
writeEnd(HtmlTags.UNORDEREDLIST);
}
return;
}
case Element.LISTITEM:
{
ListItem listItem = (ListItem) element;
styleAttributes = new Properties();
if (listItem.hasLeading()) styleAttributes.setProperty(Markup.CSS_KEY_LINEHEIGHT, listItem.getTotalLeading() + "pt");
// start tag
addTabs(indent);
writeStart(HtmlTags.LISTITEM);
writeMarkupAttributes(markup);
write(listItem.getFont(), styleAttributes);
os.write(GT);
currentfont.push(listItem.getFont());
// contents
for (Iterator i = listItem.iterator(); i.hasNext(); ) {
write((Element) i.next(), indent + 1);
}
// end tag
addTabs(indent);
writeEnd(HtmlTags.LISTITEM);
currentfont.pop();
return;
}
case Element.CELL:
{
Cell cell = (Cell) element;
// start tag
addTabs(indent);
if (cell.isHeader()) {
writeStart(HtmlTags.HEADERCELL);
}
else {
writeStart(HtmlTags.CELL);
}
writeMarkupAttributes(markup);
if (cell.getBorderWidth() != Rectangle.UNDEFINED) {
write(HtmlTags.BORDERWIDTH, String.valueOf(cell.getBorderWidth()));
}
if (cell.getBorderColor() != null) {
write(HtmlTags.BORDERCOLOR, HtmlEncoder.encode(cell.getBorderColor()));
}
if (cell.getBackgroundColor() != null) {
write(HtmlTags.BACKGROUNDCOLOR, HtmlEncoder.encode(cell.getBackgroundColor()));
}
String alignment = HtmlEncoder.getAlignment(cell.getHorizontalAlignment());
if (!"".equals(alignment)) {
write(HtmlTags.HORIZONTALALIGN, alignment);
}
alignment = HtmlEncoder.getAlignment(cell.getVerticalAlignment());
if (!"".equals(alignment)) {
write(HtmlTags.VERTICALALIGN, alignment);
}
if (cell.getWidthAsString() != null) {
write(HtmlTags.WIDTH, cell.getWidthAsString());
}
if (cell.getColspan() != 1) {
write(HtmlTags.COLSPAN, String.valueOf(cell.getColspan()));
}
if (cell.getRowspan() != 1) {
write(HtmlTags.ROWSPAN, String.valueOf(cell.getRowspan()));
}
if (cell.getMaxLines() == 1) {
write(HtmlTags.NOWRAP, String.valueOf(true));
}
os.write(GT);
// contents
if (cell.isEmpty()) {
write(NBSP);
} else {
for (Iterator i = cell.getElements(); i.hasNext(); ) {
write((Element) i.next(), indent + 1);
}
}
// end tag
addTabs(indent);
if (cell.isHeader()) {
writeEnd(HtmlTags.HEADERCELL);
}
else {
writeEnd(HtmlTags.CELL);
}
return;
}
case Element.ROW:
{
Row row = (Row) element;
// start tag
addTabs(indent);
writeStart(HtmlTags.ROW);
writeMarkupAttributes(markup);
os.write(GT);
// contents
Element cell;
for (int i = 0; i < row.getColumns(); i++) {
if ((cell = (Element)row.getCell(i)) != null) {
write(cell, indent + 1);
}
}
// end tag
addTabs(indent);
writeEnd(HtmlTags.ROW);
return;
}
case Element.TABLE:
{
Table table;
try {
table = (Table) element;
}
catch(ClassCastException cce) {
try {
table = ((SimpleTable)element).createTable();
} catch (BadElementException e) {
throw new ExceptionConverter(e);
}
}
table.complete();
// start tag
addTabs(indent);
writeStart(HtmlTags.TABLE);
writeMarkupAttributes(markup);
os.write(SPACE);
write(HtmlTags.WIDTH);
os.write(EQUALS);
os.write(QUOTE);
write(String.valueOf(table.getWidth()));
if (!table.isLocked()){
write("%");
}
os.write(QUOTE);
String alignment = HtmlEncoder.getAlignment(table.getAlignment());
if (!"".equals(alignment)) {
write(HtmlTags.ALIGN, alignment);
}
write(HtmlTags.CELLPADDING, String.valueOf(table.getPadding()));
write(HtmlTags.CELLSPACING, String.valueOf(table.getSpacing()));
if (table.getBorderWidth() != Rectangle.UNDEFINED) {
write(HtmlTags.BORDERWIDTH, String.valueOf(table.getBorderWidth()));
}
if (table.getBorderColor() != null) {
write(HtmlTags.BORDERCOLOR, HtmlEncoder.encode(table.getBorderColor()));
}
if (table.getBackgroundColor() != null) {
write(HtmlTags.BACKGROUNDCOLOR, HtmlEncoder.encode(table.getBackgroundColor()));
}
os.write(GT);
// contents
Row row;
for (Iterator iterator = table.iterator(); iterator.hasNext(); ) {
row = (Row) iterator.next();
write(row, indent + 1);
}
// end tag
addTabs(indent);
writeEnd(HtmlTags.TABLE);
return;
}
case Element.ANNOTATION:
{
Annotation annotation = (Annotation) element;
writeComment(annotation.title() + ": " + annotation.content());
return;
}
case Element.IMGRAW:
case Element.JPEG:
case Element.IMGTEMPLATE:
{
Image image = (Image) element;
if (image.getUrl() == null) {
return;
}
// start tag
addTabs(indent);
writeStart(HtmlTags.IMAGE);
String path = image.getUrl().toString();
if (imagepath != null) {
if (path.indexOf('/') > 0) {
path = imagepath + path.substring(path.lastIndexOf('/') + 1);
}
else {
path = imagepath + path;
}
}
write(HtmlTags.URL, path);
if ((image.getAlignment() & Image.RIGHT) > 0) {
write(HtmlTags.ALIGN, HtmlTags.ALIGN_RIGHT);
}
else if ((image.getAlignment() & Image.MIDDLE) > 0) {
write(HtmlTags.ALIGN, HtmlTags.ALIGN_MIDDLE);
}
else {
write(HtmlTags.ALIGN, HtmlTags.ALIGN_LEFT);
}
if (image.getAlt() != null) {
write(HtmlTags.ALT, image.getAlt());
}
write(HtmlTags.PLAINWIDTH, String.valueOf(image.getScaledWidth()));
write(HtmlTags.PLAINHEIGHT, String.valueOf(image.getScaledHeight()));
writeMarkupAttributes(markup);
writeEnd();
return;
}
default:
return;
}
}
/**
* Writes the HTML representation of a section.
*
* @param section the section to write
* @param indent the indentation
* @throws IOException
*/
protected void writeSection(Section section, int indent) throws IOException {
if (section.getTitle() != null) {
int depth = section.getDepth() - 1;
if (depth > 5) {
depth = 5;
}
Properties styleAttributes = new Properties();
if (section.getTitle().hasLeading()) styleAttributes.setProperty(Markup.CSS_KEY_LINEHEIGHT, section.getTitle().getTotalLeading() + "pt");
// start tag
addTabs(indent);
writeStart(HtmlTags.H[depth]);
write(section.getTitle().getFont(), styleAttributes);
String alignment = HtmlEncoder.getAlignment(section.getTitle().getAlignment());
if (!"".equals(alignment)) {
write(HtmlTags.ALIGN, alignment);
}
writeMarkupAttributes(markup);
os.write(GT);
currentfont.push(section.getTitle().getFont());
// contents
for (Iterator i = section.getTitle().iterator(); i.hasNext(); ) {
write((Element)i.next(), indent + 1);
}
// end tag
addTabs(indent);
writeEnd(HtmlTags.H[depth]);
currentfont.pop();
}
for (Iterator i = section.iterator(); i.hasNext(); ) {
write((Element) i.next(), indent);
}
}
/**
* Writes the representation of a <CODE>Font</CODE>.
*
* @param font a <CODE>Font</CODE>
* @param styleAttributes the style of the font
* @throws IOException
*/
protected void write(Font font, Properties styleAttributes) throws IOException {
if (font == null || !isOtherFont(font) /* || styleAttributes == null*/) return;
write(" ");
write(HtmlTags.STYLE);
write("=\"");
if (styleAttributes != null) {
String key;
for (Enumeration e = styleAttributes.propertyNames(); e.hasMoreElements(); ) {
key = (String)e.nextElement();
writeCssProperty(key, styleAttributes.getProperty(key));
}
}
if (isOtherFont(font)) {
writeCssProperty(Markup.CSS_KEY_FONTFAMILY, font.getFamilyname());
if (font.getSize() != Font.UNDEFINED) {
writeCssProperty(Markup.CSS_KEY_FONTSIZE, font.getSize() + "pt");
}
if (font.getColor() != null) {
writeCssProperty(Markup.CSS_KEY_COLOR, HtmlEncoder.encode(font.getColor()));
}
int fontstyle = font.getStyle();
BaseFont bf = font.getBaseFont();
if (bf != null) {
String ps = bf.getPostscriptFontName().toLowerCase();
if (ps.indexOf("bold") >= 0) {
if (fontstyle == Font.UNDEFINED)
fontstyle = 0;
fontstyle |= Font.BOLD;
}
if (ps.indexOf("italic") >= 0 || ps.indexOf("oblique") >= 0) {
if (fontstyle == Font.UNDEFINED)
fontstyle = 0;
fontstyle |= Font.ITALIC;
}
}
if (fontstyle != Font.UNDEFINED && fontstyle != Font.NORMAL) {
switch (fontstyle & Font.BOLDITALIC) {
case Font.BOLD:
writeCssProperty(Markup.CSS_KEY_FONTWEIGHT, Markup.CSS_VALUE_BOLD);
break;
case Font.ITALIC:
writeCssProperty(Markup.CSS_KEY_FONTSTYLE, Markup.CSS_VALUE_ITALIC);
break;
case Font.BOLDITALIC:
writeCssProperty(Markup.CSS_KEY_FONTWEIGHT, Markup.CSS_VALUE_BOLD);
writeCssProperty(Markup.CSS_KEY_FONTSTYLE, Markup.CSS_VALUE_ITALIC);
break;
}
// CSS only supports one decoration tag so if both are specified
// only one of the two will display
if ((fontstyle & Font.UNDERLINE) > 0) {
writeCssProperty(Markup.CSS_KEY_TEXTDECORATION, Markup.CSS_VALUE_UNDERLINE);
}
if ((fontstyle & Font.STRIKETHRU) > 0) {
writeCssProperty(Markup.CSS_KEY_TEXTDECORATION, Markup.CSS_VALUE_LINETHROUGH);
}
}
}
write("\"");
}
/**
* Writes out a CSS property.
* @param prop a CSS property
* @param value the value of the CSS property
* @throws IOException
*/
protected void writeCssProperty(String prop, String value) throws IOException {
write(new StringBuffer(prop).append(": ").append(value).append("; ").toString());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -