Browse Source

REPORT-13464 [10.0.2回归]表单导出排版混乱,背景未导出

bugfix/10.0
kerry 6 years ago
parent
commit
d4323d8e43
  1. 4
      fine-itext/src/com/fr/third/v2/lowagie/text/html/CSSUtils.java
  2. 36
      fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncCell.java
  3. 16
      fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncTable.java

4
fine-itext/src/com/fr/third/v2/lowagie/text/html/CSSUtils.java

@ -94,7 +94,9 @@ public class CSSUtils {
try { try {
if(str.endsWith("px") || str.endsWith("pt")){ if(str.endsWith("px") || str.endsWith("pt")){
result = Float.parseFloat(str.substring(0, str.length() - 2)); result = Float.parseFloat(str.substring(0, str.length() - 2));
}else{ }else if(str.endsWith("%")){
result = Float.parseFloat(str.substring(0, str.length() - 1));
}else {
result = Float.parseFloat(str); result = Float.parseFloat(str);
} }
}catch (NumberFormatException e){ }catch (NumberFormatException e){

36
fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncCell.java

@ -60,7 +60,6 @@ import com.fr.third.v2.lowagie.text.pdf.PdfPCell;
import com.fr.third.v2.lowagie.text.Phrase; import com.fr.third.v2.lowagie.text.Phrase;
/** /**
*
* @author psoares * @author psoares
*/ */
public class IncCell implements TextElementArray { public class IncCell implements TextElementArray {
@ -68,9 +67,11 @@ public class IncCell implements TextElementArray {
private ArrayList chunks = new ArrayList(); private ArrayList chunks = new ArrayList();
private PdfPCell cell; private PdfPCell cell;
/** Creates a new instance of IncCell */ /**
* Creates a new instance of IncCell
*/
public IncCell(String tag, ChainedProperties props) { public IncCell(String tag, ChainedProperties props) {
cell = new PdfPCell((Phrase)null); cell = new PdfPCell((Phrase) null);
String value = props.getProperty("colspan"); String value = props.getProperty("colspan");
if (value != null) if (value != null)
cell.setColspan(Integer.parseInt(value)); cell.setColspan(Integer.parseInt(value));
@ -104,43 +105,46 @@ public class IncCell implements TextElementArray {
if (value != null) if (value != null)
cell.setPadding(CSSUtils.parseFloat(value)); cell.setPadding(CSSUtils.parseFloat(value));
cell.setUseDescender(true); cell.setUseDescender(true);
value = props.getProperty("bgcolor");
cell.setBackgroundColor(Markup.decodeColor(value));
//解析td上声明的width //解析td上声明的width
value = props.getLastChainProperty("width"); value = props.getLastChainProperty("width");
if(value != null){ if (value != null) {
cell.setStyleWidth(CSSUtils.parseFloat(value)); cell.setStyleWidth(CSSUtils.parseFloat(value));
} }
//解析td上声明的height //解析td上声明的height
value = props.getLastChainProperty("height"); value = props.getLastChainProperty("height");
if(value != null){ if (value != null) {
cell.setStyleHeight(CSSUtils.parseFloat(value)); cell.setStyleHeight(CSSUtils.parseFloat(value));
} }
//解析background相关属性并保存到cell对象 //解析background相关属性并保存到cell对象
Map<String, String> backgroundRules = new HashMap<String, String>(); Map<String, String> backgroundRules = new HashMap<String, String>();
value = props.getProperty("bgcolor");
if (value != null) {
backgroundRules.put("background-color", value);
}
value = props.getLastChainProperty("background-size"); value = props.getLastChainProperty("background-size");
if(value!=null){ if (value != null) {
backgroundRules.put("background-size", value); backgroundRules.put("background-size", value);
} }
value = props.getLastChainProperty("background"); value = props.getLastChainProperty("background");
if(value!=null){ if (value != null) {
Map<String, String> backgroundStyles = CSSUtils.processBackground(value); Map<String, String> backgroundStyles = CSSUtils.processBackground(value);
backgroundRules.putAll(backgroundStyles); backgroundRules.putAll(backgroundStyles);
} }
value = props.getLastChainProperty("background-color"); value = props.getLastChainProperty("background-color");
if(value!=null){ if (value != null) {
backgroundRules.put("background-color", value); backgroundRules.put("background-color", value);
} }
value = props.getLastChainProperty("background-position"); value = props.getLastChainProperty("background-position");
if(value!=null){ if (value != null) {
backgroundRules.put("background-position", value); backgroundRules.put("background-position", value);
} }
value = props.getLastChainProperty("background-repeat"); value = props.getLastChainProperty("background-repeat");
if(value!=null){ if (value != null) {
backgroundRules.put("background-repeat", value); backgroundRules.put("background-repeat", value);
} }
value = props.getLastChainProperty("background-image"); value = props.getLastChainProperty("background-image");
if(value!=null){ if (value != null) {
backgroundRules.put("background-image", value); backgroundRules.put("background-image", value);
} }
cell.setBackground(backgroundRules); cell.setBackground(backgroundRules);
@ -149,7 +153,7 @@ public class IncCell implements TextElementArray {
public boolean add(Object o) { public boolean add(Object o) {
if (!(o instanceof Element)) if (!(o instanceof Element))
return false; return false;
cell.addElement((Element)o); cell.addElement((Element) o);
return true; return true;
} }
@ -170,16 +174,16 @@ public class IncCell implements TextElementArray {
} }
/** /**
* @see Element#isContent()
* @since iText 2.0.8 * @since iText 2.0.8
* @see Element#isContent()
*/ */
public boolean isContent() { public boolean isContent() {
return true; return true;
} }
/** /**
* @see Element#isNestable()
* @since iText 2.0.8 * @since iText 2.0.8
* @see Element#isNestable()
*/ */
public boolean isNestable() { public boolean isNestable() {
return true; return true;

16
fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncTable.java

@ -151,10 +151,9 @@ public class IncTable {
table.addCell((PdfPCell)col.get(k)); table.addCell((PdfPCell)col.get(k));
} }
} }
//调整行高
for(int a = 0; a < rowHeights.size(); a++){ processRowHeight(table);
table.getRow(a).setStyleHeight(rowHeights.get(a));
}
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
@ -162,6 +161,15 @@ public class IncTable {
return table; return table;
} }
public void processRowHeight(PdfPTable table){
Float height = CSSUtils.parseFloat((String)props.get("height"));
Float eachHeight = height / table.getRows().size();
//调整行高
for(int a = 0; a < rowHeights.size(); a++){
table.getRow(a).setStyleHeight(Math.max(eachHeight, rowHeights.get(a)));
}
}
public TableProperties parseTableProperties(){ public TableProperties parseTableProperties(){
TableProperties tableProperties = new TableProperties(); TableProperties tableProperties = new TableProperties();
BorderStyle borderStyle = new BorderStyle(); BorderStyle borderStyle = new BorderStyle();

Loading…
Cancel
Save