Creating PDF documents using MagicBox
CloudIO supports MagicBox, a Java tool to create PDF documents. Its “Design and Data Centric” approach allows you to create PDF documents with minimal code that is easy to write and understand.
To create a PDF page, refer to the code below:
MagicBox magicBox = MagicBox.getInstance();
PDFPage page = magicBox.createPage();
To save a PDF to stream, refer to the code below:
magicBox.save(outputStream);
You can add the code to create PDF documents in the Java Snippets page.
The platform supports a list of widgets for page formatting. A widget is the parent type to use the available child methods, such as, Div, Image, and many more.
Available methods:
void setWidth(float width);
float getWidth();
float getOffsetWidth();
void setHeight(float height);
float getHeight();
float getOffsetHeight();
void setStartX(float startX);
float getStartX();
void setStartY(float startY);
float getStartY();
void resetStartY(float startY);
void setWidthPercentage(int widthPerc);
void setMarginTop(float marginTop);
void appendMarginTop(float mt);
float getMarginTop();
void setMarginRight(float marginRight);
float getMarginRight();
void setMarginLeft(float marginLeft);
void appendMarginLeft(float ml);
float getMarginLeft();
void setParent(MBWidget parent);
MBWidget getParent();
Void setIgnoreNewPage(Boolean ignoreNewPage) ;
Boolean isIgnoreNewPage();
Sample widget snippets
import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import io.cloudio.pdfutil.magicbox.MagicBox;
import io.cloudio.pdfutil.magicbox.widgets.PDFPage;
import io.cloudio.pdfutil.magicbox.widgets.images.Image;
import io.cloudio.pdfutil.magicbox.widgets.layouts.Div;
import io.cloudio.pdfutil.magicbox.widgets.layouts.FormPanel;
import io.cloudio.pdfutil.magicbox.widgets.tables.DataTable;
import io.cloudio.pdfutil.widgets.widgets.tables.Panel;
import io.cloudio.pdfutil.magicbox.widgets.tables.Table.FontAlignment;
import io.cloudio.pdfutil.magicbox.widgets.tables.components.CellConfig;
import io.cloudio.pdfutil.magicbox.widgets.tables.components.RowData;
import io.cloudio.pdfutil.magicbox.widgets.text.TextBox;
import io.cloudio.pdfutil.magicbox.widgets.text.PageCounter;
import io.cloudio.pdfutil.magicbox.widgets.layouts.Footer;
import io.cloudio.pdfutil.magicbox.widgets.layouts.Header;
static Color primaryColor = Color.decode("#057dcd");
static Color secondaryColor = Color.decode("#057dcd");
static Color textPrimaryColor = Color.decode("#464646");
static PDType1Font primaryFont = PDType1Font.HELVETICA;
public static void main(String[] args) throws Exception {
MagicBox magicBox = new MagicBox();
PDFPage page = magicBox.createPage();
//Footer
Footer footer = new Footer();
footer.borders(true);
// Page Counter
PageCounter pc = new PageCounter();
pc.setMarginLeft(250);
pc.setMarginTop(-5);
pc.setExpression("Page " + PageCounter.CURRENT_PAGE_INDEX + " of " + PageCounter.TOTAL_PAGES);
footer.appendChild(pc);
page.addWidget(footer);
//addLogo(page, "Local path/URL to your logo")
RowData formPanel1Data = new RowData();
formPanel1Data.add("cutOff", "Monday");
formPanel1Data.add("delivery", "By Thursday");
formPanel1Data.add("weight", "500 lbs. or $50.00");
formPanel1Data.add("little", " ");
formPanel1Data.add("customerNumber", "50950");
formPanel1Data.add("customerBook", "ENCO006342");
addFormPanel1(page, formPanel1Data);
List < RowData > rows = new ArrayList();
RowData row1 = new RowData();
row1.add("superSpan", "29 GA. GALVALUME Plus");
row1.add("grade", "(AZ55 Grade 80)");
row1.add("priceSqr", "$95.25");
row1.add("priceLft", "$3.04");
rows.add(row1);
RowData row2 = new RowData();
row2.add("superSpan", "29 GA. GALVALUME Plus");
row2.add("grade", "(AZ55 Grade 80)");
row2.add("priceSqr", "$125.50");
row2.add("priceLft", "$4.00");
rows.add(row2);
RowData row3 = new RowData();
row3.add("superSpan", "26 GA. Commodity Colors");
row3.add("grade", "(AZ55 Grade 80)");
row3.add("priceSqr", "$125.75");
row3.add("priceLft", "$3.92");
rows.add(row3);
addDataTable1(page, primaryColor, 30 f, rows);
List < RowData > commerialPaneldata = getTable2Data();
addCommercialPanelTable(page, commerialPaneldata);
addDataTable2(page, secondaryColor, 10, rows);
response.setHeader("Content-Disposition","attachment; filename=\"test.pdf\"");
response.setContentType("application/pdf");
magicBox.save(response.getOutputStream());
}
private static void addLogo(PDFPage page, String logoPath) {
Image headerLogo = new Image(logoPath, 200, 96);
float mr = (page.getWidth() - headerLogo.getWidth()) / 2 .5 f;
headerLogo.setMarginLeft(mr);
page.addWidget(headerLogo);
}
private static void addFormPanel1(PDFPage page, RowData row) {
addFormPanel1Header(page);
FormPanel formPanel = new FormPanel();
formPanel.setMarginTop(20);
formPanel.setMarginLeft(20);
Panel panel1 = formPanel.createPanel();
panel1.setHeaderFontSize(8);
panel1.setCellPadding(0);
panel1.setCellFontSize(8);
panel1.setCellFontColor(textPrimaryColor);
panel1.setHeaderFontColor(textPrimaryColor);
panel1.setCellFontAlignment(FontAlignment.LEFT);
panel1.setHeaderFontAlignment(FontAlignment.LEFT);
List < CellConfig > cellConfigs = new ArrayList();
CellConfig c = new CellConfig("cutOff", "Cutoff");
cellConfigs.add(new CellConfig("cutOff", "Cutoff"));
cellConfigs.add(new CellConfig("delivery", "Delivery"));
cellConfigs.add(new CellConfig("weight", "Weight min."));
panel1.setCellConfigs(cellConfigs);
panel1.setData(row);
Panel panel2 = formPanel.createPanel();
panel2.setHeaderFontSize(8);
panel2.setCellPadding(0);
panel2.setCellFontSize(8);
panel2.setCellFontColor(textPrimaryColor);
panel2.setHeaderFontColor(textPrimaryColor);
panel2.setCellFontAlignment(FontAlignment.LEFT);
panel2.setHeaderFontAlignment(FontAlignment.LEFT);
List < CellConfig > cellConfigs2 = new ArrayList();
cellConfigs2.add(new CellConfig("little", "Little Rock, AR 72204"));
cellConfigs2.add(new CellConfig("customerNumber", "Customer Number"));
cellConfigs2.add(new CellConfig("customerBook", "Customer Book"));
panel2.setCellConfigs(cellConfigs2);
panel2.setData(row);
page.addWidget(formPanel);
}
private static void addFormPanel1Header(PDFPage page) {
Div div = new Div();
div.setWidth(page.getOffsetWidth());
div.setMarginTop(30);
Div div1 = new Div();
div1.setWidthPercentage(50);
div.appendChild(div1);
TextBox deliveryText = new TextBox("DELEVERY");
deliveryText.setFontColor(secondaryColor);
deliveryText.setFontSize(10);
deliveryText.setFontType(primaryFont);
div1.appendChild(deliveryText);
Div separator = getSeparator(100, 200);
div1.appendChild(separator);
Div div2 = new Div();
div2.setWidthPercentage(50);
div2.setMarginLeft(div.getWidth() / 2);
div.appendChild(div2);
TextBox encoreText = new TextBox("ENCORE STEEL BUILDINGS LLC");
encoreText.setFontColor(secondaryColor);
encoreText.setFontSize(10);
encoreText.setFontType(primaryFont);
div2.appendChild(encoreText);
div2.appendChild(separator);
page.addWidget(div);
}
private static void addDataTable1(PDFPage page, Color color, float marginTop, List < RowData > rows) {
DataTable table = new DataTable();
table.setMarginTop(marginTop);
table.setBorderLineSize(0 .1 f;
table.setBorderColor(color);
table.setHeaderBackgroundColor(color);
table.setCellFontColor(textPrimaryColor);
table.setHeaderFontColor(Color.WHITE);
table.setCellFontSize(8);
table.setCellAlignment(FontAlignment.CENTER);
table.setHeaderFontSize(8);
List < CellConfig > cellConfigs = new ArrayList();
cellConfigs.add(new CellConfig("superSpan", "SUPER SPAN / LOW RIB"));
cellConfigs.add(new CellConfig("grade", "Grade"));
cellConfigs.add(new CellConfig("priceSqr", "PRICE/SQR"));
cellConfigs.add(new CellConfig("priceLft", "PRICE/LFT"));
table.setCellConfigs(cellConfigs);
table.setRows(rows);
page.addWidget(table);
}
private static void addCommercialPanelTable(PDFPage page, List < RowData > rows) {
addCommercialPanelHeader(page);
DataTable table = new DataTable();
table.setMarginTop(0);
table.setBorderLineSize(0 .1 f);
table.setCellFontSize(8);
table.setBorderColor(Color.WHITE);
table.setCellPadding(2);
table.setCellFontColor(textPrimaryColor);
table.setHeaderBackgroundColor(Color.WHITE);
table.setFontType(primaryFont);
table.setCellAlignment(FontAlignment.LEFT);
List < CellConfig > cellConfigs = new ArrayList();
cellConfigs.add(new CellConfig("superSpan", ""));
cellConfigs.add(new CellConfig("grade", ""));
cellConfigs.add(new CellConfig("priceSqr", ""));
cellConfigs.add(new CellConfig("priceLft", ""));
table.setCellConfigs(cellConfigs);
table.setRows(rows);
page.addWidget(table);
}
private static void addCommercialPanelHeader(PDFPage page) {
Div div = new Div();
div.setWidthPercentage(100);
div.setMarginTop(30);
TextBox textBox = new TextBox("COMMERCIAL/INDUSTRIAL PANELS");
textBox.setFontSize(10);
textBox.setFontColor(secondaryColor);
textBox.setFontType(primaryFont);
div.appendChild(textBox);
Div line = getSeparator(200, page.getOffsetWidth());
div.appendChild(line);
page.addWidget(div);
}
private static void addDataTable2(PDFPage page, Color color, float marginTop, List < RowData > rows) {
TextBox textBox = new TextBox("SUPER SPAN X / LOW RIB X / MONARCH");
textBox.setFontSize(10);
textBox.setFontType(PDType1Font.HELVETICA);
textBox.setFontColor(secondaryColor);
textBox.setMarginTop(30);
page.addWidget(textBox);
addDataTable1(page, color, marginTop, rows);
}
private static List < RowData > getTable2Data() {
List < RowData > rows = new ArrayList();
RowData row1 = new RowData();
row1.add("superSpan", "29 GA. GALVALUME Plus");
row1.add("grade", "(AZ55 Grade 80)");
row1.add("priceSqr", "$9999.00");
row1.add("priceLft", "$318.95");
rows.add(row1);
RowData row2 = new RowData();
row2.add("superSpan", "26 GA. SMP Colors");
row2.add("grade", "(AZ55 Grade 80)");
row2.add("priceSqr", "$131.50");
row2.add("priceLft", "$132.50");
rows.add(row2);
RowData row3 = new RowData();
row3.add("superSpan", "22 GA. Poly Polar White");
row3.add("grade", "(AZ55 Grade 80)");
row3.add("priceSqr", "$201.95");
row3.add("priceLft", "$3.92");
rows.add(row3);
RowData row4 = new RowData();
row4.add("superSpan", "22 GA. Poly Polar White");
row4.add("grade", "(AZ55 Grade 80)");
row4.add("priceSqr", "$201.95");
row4.add("priceLft", "$3.92");
rows.add(row4);
RowData row5 = new RowData();
row5.add("superSpan", "29 GA. GALVALUME Plus");
row5.add("grade", "(AZ55 Grade 80)");
row5.add("priceSqr", "$9999.00");
row5.add("priceLft", "$318.95");
rows.add(row5);
return rows;
}
private static Div getSeparator(float length1, float length2) {
Div div = new Div();
div.setMarginTop(30);
Div div1 = new Div();
div1.setWidth(length1);
div1.setHeight(2);
div1.setBackgroundColor(secondaryColor);
div.appendChild(div1);
Div div2 = new Div();
div2.setWidth(length2);
div2.setHeight(1);
div2.setMarginTop(1);
div2.setBackgroundColor(secondaryColor);
div.appendChild(div2);
return div;
}
main(null);
Last updated
Was this helpful?