Read and respond to this message at:
https://sourceforge.net/forum/message.php?msg_id=6078162
By: chikkubhai
As for the following example, I wanted to include sub-totals and totals in the
PDF export, try it in your application and it just wouldn't. I wrote my own
class MyITextTotalWrapper.java as shown below showing how you can control what
you want to see in your PDF export. I also made some changes to my
DefaultItextExportView.java doExport() method to remove and set the export
output formatting!
Another class for example, ItextTableWriter.java, decides what style and format
is applied and is probably the class you are looking for! Let me know if you
want more hints, I was even thinking of committing my changes or raise
a JIRA/update/patch kind of a thing so that other's could make use of it!
All of this was possible after getting inspired with the WYSIWYG kind of
exporting
in the displaytable live examples section:
package displaytag.sample.decorators;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.List;
import org.displaytag.model.HeaderCell;
import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Chunk;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Table;
// Referenced classes of package org.displaytag.sample.decorators:
// TotalWrapperTemplate
// This uses the existing TotalTableDecorator which creates the subTotal
// and Total fields as required
public class MyITextTotalWrapper extends MyTotalTableDecoratorTemplate
implements
org.displaytag.render.ItextTableWriter.ItextDecorator {
private Table table;
private Font font;
public MyITextTotalWrapper() {
}
public void setTable(Table table) {
this.table = table;
}
public void setFont(Font font) {
this.font = font;
}
// The type MyITextTotalWrapper must implement the inherited abstract
method
// MyTotalTableDecoratorTemplate.createTotalRow(boolean)
protected void createTotalRow(boolean grandTotal) {
writeTotal(grandTotal);
System.out.println("ITextTotalWrapper: inside createTotalRow()
method");
subTotals.clear();
}
private void writeTotal(Boolean grandTotal) {
if (assertRequiredState())
try {
font =
FontFactory.getFont(font.getFamilyname(), font.size(),
1, font.color());
List headerCells =
tableModel.getHeaderCellList();
// Iterate every header cell
for (Iterator it = headerCells.iterator();
it.hasNext(); )
{
// Construct a new pdf cell element
HeaderCell cell = (HeaderCell)
it.next();
Cell cellToBeAdded = getCell("");
// If the headerCell is having an
isTotaled
if (cell.isTotaled())
{
// Get the propertyName
String totalPropertyName =
cell.getBeanPropertyName();
// Get the total or sub-total
values for the propertyName
Object total = grandTotal ?
grandTotals.get(totalPropertyName)
:
subTotals.get(totalPropertyName);
// Update the currentCell with
its sub-total or total
cellToBeAdded = getCell(total +
"");
}
// As there must be one group by set
with group = "1", it cannot
// have the sub-total enabled on that
field!
// I think it is possible to do both on
that field also such as
// ytd_wages sub-total:
ytd_wages_subTotalValue
// I think this part over writes the
possibility where the user
// accidentally sets the total="true"
along with group="1"
// it will only show the label and not
the total if it is a group by field
// Adds the subTotal label or totalLabel
// Under the group=1 property column
if (groupPropertyName != null
&&
groupPropertyName.equals(cell.getBeanPropertyName()))
cellToBeAdded =
getCell((grandTotal ? totalLabel : MessageFormat.format(
subtotalLabel,
new Object[] { previousValues
.get(groupPropertyName) })));
// Finally add the cell for each
iteration
table.addCell(cellToBeAdded);
}
} catch (BadElementException e) {
e.printStackTrace();
}
}
private Cell getCell(String value) throws BadElementException {
Cell cell = new Cell(new Chunk(value, font));
cell.setLeading(8F);
cell.setHorizontalAlignment(0);
return cell;
}
private boolean assertRequiredState() {
return table != null && font != null;
}
}
______________________________________________________________________
You are receiving this email because you elected to monitor this forum.
To stop monitoring this forum, login to SourceForge.net and visit:
https://sourceforge.net/forum/unmonitor.php?forum_id=249318
------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
displaytag-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/displaytag-user