📄 rtfwriter.java
字号:
writeInt(out, addFont(font));
} else {
writeInt(out, 0);
}
out.write(escape);
out.write(fontSize);
if (font.getSize() > 0) {
writeInt(out, (int) (font.getSize() * 2));
} else {
writeInt(out, 20);
}
out.write(escape);
out.write(fontColor);
writeInt(out, addColor(font.getColor()));
if (font.isBold()) {
out.write(escape);
out.write(bold);
}
if (font.isItalic()) {
out.write(escape);
out.write(italic);
}
if (font.isUnderlined()) {
out.write(escape);
out.write(underline);
}
if (font.isStrikethru()) {
out.write(escape);
out.write(strikethrough);
}
/*
* Superscript / Subscript added by Scott Dietrich (sdietrich@emlab.com)
*/
if (chunk.getAttributes() != null) {
Float f = (Float) chunk.getAttributes().get(Chunk.SUBSUPSCRIPT);
if (f != null)
if (f.floatValue() > 0) {
out.write(escape);
out.write(startSuper);
} else if (f.floatValue() < 0) {
out.write(escape);
out.write(startSub);
}
}
out.write(delimiter);
}
protected void writeFinishingFontSignature(OutputStream out, Chunk chunk) throws IOException {
Font font = chunk.getFont();
if (font.isBold()) {
out.write(escape);
out.write(bold);
writeInt(out, 0);
}
if (font.isItalic()) {
out.write(escape);
out.write(italic);
writeInt(out, 0);
}
if (font.isUnderlined()) {
out.write(escape);
out.write(underline);
writeInt(out, 0);
}
if (font.isStrikethru()) {
out.write(escape);
out.write(strikethrough);
writeInt(out, 0);
}
/*
* Superscript / Subscript added by Scott Dietrich (sdietrich@emlab.com)
*/
if (chunk.getAttributes() != null) {
Float f = (Float) chunk.getAttributes().get(Chunk.SUBSUPSCRIPT);
if (f != null)
if (f.floatValue() != 0) {
out.write(escape);
out.write(endSuperSub);
}
}
}
/**
* Write a <code>ListItem</code>
*
* @param listItem The <code>ListItem</code> to be written
* @param out The <code>ByteArrayOutputStream</code> to write to
*
* @throws IOException
* @throws DocumentException
*/
private void writeListElement(ListItem listItem, ByteArrayOutputStream out) throws IOException, DocumentException {
Iterator chunks = listItem.getChunks().iterator();
while (chunks.hasNext()) {
Chunk ch = (Chunk) chunks.next();
addElement(ch, out);
}
out.write(escape);
out.write(paragraph);
}
/**
* Write a <code>List</code>
*
* @param list The <code>List</code> to be written
* @param out The <code>ByteArrayOutputStream</code> to write to
*
* @throws IOException
* @throws DocumentException
*/
private void writeList(com.lowagie.text.List list, ByteArrayOutputStream out) throws IOException, DocumentException {
int type = 0;
int align = 0;
int fontNr = addFont(new Font(Font.SYMBOL, 10, Font.NORMAL, new Color(0, 0, 0)));
if (!list.isNumbered()) type = 23;
if (listLevel == 0) {
maxListLevel = 0;
listtable.write(openGroup);
listtable.write(escape);
listtable.write(listDefinition);
int i = getRandomInt();
listtable.write(escape);
listtable.write(listTemplateID);
writeInt(listtable, i);
listtable.write(escape);
listtable.write(hybridList);
listtable.write((byte) '\n');
}
if (listLevel >= maxListLevel) {
maxListLevel++;
listtable.write(openGroup);
listtable.write(escape);
listtable.write(listLevelDefinition);
listtable.write(escape);
listtable.write(listLevelTypeOld);
writeInt(listtable, type);
listtable.write(escape);
listtable.write(listLevelTypeNew);
writeInt(listtable, type);
listtable.write(escape);
listtable.write(listLevelAlignOld);
writeInt(listtable, align);
listtable.write(escape);
listtable.write(listLevelAlignNew);
writeInt(listtable, align);
listtable.write(escape);
listtable.write(listLevelStartAt);
writeInt(listtable, 1);
listtable.write(openGroup);
listtable.write(escape);
listtable.write(listLevelTextDefinition);
listtable.write(escape);
listtable.write(listLevelTextLength);
if (list.isNumbered()) {
writeInt(listtable, 2);
} else {
writeInt(listtable, 1);
}
listtable.write(escape);
if (list.isNumbered()) {
listtable.write(listLevelTextStyleNumbers);
} else {
listtable.write(listLevelTextStyleBullet);
}
listtable.write(commaDelimiter);
listtable.write(closeGroup);
listtable.write(openGroup);
listtable.write(escape);
listtable.write(listLevelNumbersDefinition);
if (list.isNumbered()) {
listtable.write(delimiter);
listtable.write(listLevelNumbers);
writeInt(listtable, listLevel + 1);
}
listtable.write(commaDelimiter);
listtable.write(closeGroup);
if (!list.isNumbered()) {
listtable.write(escape);
listtable.write(fontNumber);
writeInt(listtable, fontNr);
}
listtable.write(escape);
listtable.write(firstIndent);
writeInt(listtable, (int) (list.getIndentationLeft() * TWIPSFACTOR * -1));
listtable.write(escape);
listtable.write(listIndent);
writeInt(listtable, (int) ((list.getIndentationLeft() + list.getSymbolIndent()) * TWIPSFACTOR));
listtable.write(escape);
listtable.write(rightIndent);
writeInt(listtable, (int) (list.getIndentationRight() * TWIPSFACTOR));
listtable.write(escape);
listtable.write(tabStop);
writeInt(listtable, (int) (list.getSymbolIndent() * TWIPSFACTOR));
listtable.write(closeGroup);
listtable.write((byte) '\n');
}
// Actual List Begin in Content
out.write(escape);
out.write(paragraphDefaults);
out.write(escape);
out.write(alignLeft);
out.write(escape);
out.write(firstIndent);
writeInt(out, (int) (list.getIndentationLeft() * TWIPSFACTOR * -1));
out.write(escape);
out.write(listIndent);
writeInt(out, (int) ((list.getIndentationLeft() + list.getSymbolIndent()) * TWIPSFACTOR));
out.write(escape);
out.write(rightIndent);
writeInt(out, (int) (list.getIndentationRight() * TWIPSFACTOR));
out.write(escape);
out.write(fontSize);
writeInt(out, 20);
out.write(escape);
out.write(listBegin);
writeInt(out, currentListID);
if (listLevel > 0) {
out.write(escape);
out.write(listCurrentLevel);
writeInt(out, listLevel);
}
out.write(openGroup);
ListIterator listItems = list.getItems().listIterator();
Element listElem;
int count = 1;
while (listItems.hasNext()) {
listElem = (Element) listItems.next();
if (listElem.type() == Element.CHUNK) {
listElem = new ListItem((Chunk) listElem);
}
if (listElem.type() == Element.LISTITEM) {
out.write(openGroup);
out.write(escape);
out.write(listTextOld);
out.write(escape);
out.write(paragraphDefaults);
out.write(escape);
out.write(fontNumber);
if (list.isNumbered()) {
writeInt(out, addFont(new Font(Font.TIMES_ROMAN, Font.NORMAL, 10, new Color(0, 0, 0))));
} else {
writeInt(out, fontNr);
}
out.write(escape);
out.write(firstIndent);
writeInt(out, (int) (list.getIndentationLeft() * TWIPSFACTOR * -1));
out.write(escape);
out.write(listIndent);
writeInt(out, (int) ((list.getIndentationLeft() + list.getSymbolIndent()) * TWIPSFACTOR));
out.write(escape);
out.write(rightIndent);
writeInt(out, (int) (list.getIndentationRight() * TWIPSFACTOR));
out.write(delimiter);
if (list.isNumbered()) {
writeInt(out, count);
out.write(".".getBytes());
} else {
out.write(escape);
out.write(listBulletOld);
}
out.write(escape);
out.write(tab);
out.write(closeGroup);
writeListElement((ListItem) listElem, out);
count++;
} else if (listElem.type() == Element.LIST) {
listLevel++;
writeList((com.lowagie.text.List) listElem, out);
listLevel--;
out.write(escape);
out.write(paragraphDefaults);
out.write(escape);
out.write(alignLeft);
out.write(escape);
out.write(firstIndent);
writeInt(out, (int) (list.getIndentationLeft() * TWIPSFACTOR * -1));
out.write(escape);
out.write(listIndent);
writeInt(out, (int) ((list.getIndentationLeft() + list.getSymbolIndent()) * TWIPSFACTOR));
out.write(escape);
out.write(rightIndent);
writeInt(out, (int) (list.getIndentationRight() * TWIPSFACTOR));
out.write(escape);
out.write(fontSize);
writeInt(out, 20);
out.write(escape);
out.write(listBegin);
writeInt(out, currentListID);
if (listLevel > 0) {
out.write(escape);
out.write(listCurrentLevel);
writeInt(out, listLevel);
}
}
out.write((byte) '\n');
}
out.write(closeGroup);
if (listLevel == 0) {
int i = getRandomInt();
listtable.write(escape);
listtable.write(listID);
writeInt(listtable, i);
listtable.write(closeGroup);
listtable.write((byte) '\n');
listoverride.write(openGroup);
listoverride.write(escape);
listoverride.write(listOverride);
listoverride.write(escape);
listoverride.write(listID);
writeInt(listoverride, i);
listoverride.write(escape);
listoverride.write(listOverrideCount);
writeInt(listoverride, 0);
listoverride.write(escape);
listoverride.write(listBegin);
writeInt(listoverride, currentListID);
currentListID++;
listoverride.write(closeGroup);
listoverride.write((byte) '\n');
}
out.write(escape);
out.write(paragraphDefaults);
}
/**
* Write a <code>Table</code>.
*
* @param table The <code>table</code> to be written
* @param out The <code>ByteArrayOutputStream</code> to write to
*
* Currently no nesting of tables is supported. If a cell contains anything but a Cell Object it is ignored.
*
* @throws IOException
* @throws DocumentException
*/
private void writeTable(Table table, ByteArrayOutputStream out) throws IOException, DocumentException {
inTable = true;
table.complete();
RtfTable rtfTable = new RtfTable(this);
rtfTable.importTable(table, pageWidth - marginLeft - marginRight);
rtfTable.writeTable(out);
inTable = false;
}
/**
* Write an <code>Image</code>.
*
* @param image The <code>image</code> to be written
* @param out The <code>ByteArrayOutputStream</code> to write to
*
* At the moment only PNG and JPEG Images are supported.
*
* @throws IOException
* @throws DocumentException
*/
private void writeImage(Image image, ByteArrayOutputStream out) throws IOException, DocumentException {
int type = image.getOriginalType();
if (!(type == Image.ORIGINAL_JPEG || type == Image.ORIGINAL_BMP
|| type == Image.ORIGINAL_PNG || type == Image.ORIGINAL_WMF))
throw new DocumentException("Only BMP, PNG, WMF and JPEG images are supported by the RTF Writer");
switch (image.getAlignment()) {
case Element.ALIGN_LEFT:
out.write(escape);
out.write(alignLeft);
break;
case Element.ALIGN_RIGHT:
out.write(escape);
out.write(alignRight);
break;
case Element.ALIGN_CENTER:
out.write(escape);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -