Skip to main content

Document code examples

General

Single-document access

DocumentDB can access a document field (obj is the business object):

// Get document meta-data from DB
DocumentDB doc = obj.getField("myDocField").getDocument(getGrant());
// Absolute path in DOC_DIR + relative path (not available with BLOB)
String path = Platform.getDocDir() + "/" + doc.getPath();
// Or input-stream to read the document
InputStream is = doc.getInputStream();
// Or force a full read in memory
byte[] b = doc.getBytes(true);

Handling document content

It is possible to save a generated document directly into a business object document field:

// With an input stream to preserve memory heap
obj.getField("myDocField").setDocument(obj, "docname.pdf", inputStream);
// Or with a content as bytes in memory
obj.getField("myDocField").setDocument(obj, "docname.pdf", bytesArray);
obj.save();

Note: the file name must include an appropriate extension vs the content of the stream or byte array.

Multi-documents access

Since V5 DocumentDB can access a multi-documents field:

// This DocumentDB contains many documents
DocumentDB multiDocs = getField("myMultiDocsField").getDocuments(this, getRowId());
// Get the list of documents
List<DocumentDB> docs = multiDocs!=null ? multiDocs.getDocuments() : null;
for (int i=0; docs!=null && i<docs.size(); i++) {
// Single document
DocumentDB doc = docs.get(i);
// Absolute path in DOC_DIR + relative path
String path = Platform.getDocDir() + "/" + doc.getPath();
// ...
}

or without DB access to retrieve meta-data already selected:

// This DocumentDB contains many documents
DocumentdB multiDocs = getField("myMultiDocsField").getDocument();
// Get the list of documents
List<DocumentDB> docs = multiDocs !=null ? multiDocs.getDocuments() : null;
// ...

QRCodes images

As of version 3.0, the standard QRCodeTool helper class provides various methods for generating QR codes images as PNG.

Typical usage is to set an image field with a URL QR code:

obj.getField("myQRCode").setDocument(obj, "qrcode.png", QRCodeTool.qrCodeImage(Globals.getContextURL()));

Barcodes images

As of version 3.1, the standard BarcodeTool helper class provides various methods for generating EAN13 Barcodes.

EAN13 checksum

The BarcodeTool.checkSum method can be used to calculate the checksum digit of a code. Typical usage is:

code = "123456789012"; // 12 digits code
code += BarcodeTool.checkSum(code); // 13 digits code with checksum

EAN13 barcode image

A EAN13 code (12 digits + 1 checksum digit) can then be used to generate a JPEG image, for instance to set an image field:

obj.getField("myEAN13Barcode").setDocument(obj, code + ".jpg", BarcodeTool.ean13Image(code));

PDF documents using iText® 2.1.7

This example is given in the server-side Rhino scripting language. It can be easily transposed to Java language.

To use the iText® library classes you need to include the com.lowagie.text package explicitly. For more information on itext 2.1.7 available on javadoc

Java

import com.lowagie.text.*;

(...)

ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();

Document pdf = PDFTool.open(bos);
pdf.add(new Paragraph("Hello world !"));
(...)
PDFTool.close(pdf);

byte[] bytes = bos.toByteArray();
// Do something with document content...
Rhino JavaScript equivalent
importPackage(Packages.com.lowagie.text);

var bos = new java.io.ByteArrayOutputStream();

var pdf = PDFTool.open(bos);
pdf.add(new Paragraph("Hello world !"));
(...)
PDFTool.close(pdf);

var bytes = bos.toByteArray();
// Do something with document content...

Note that it is possible to insert resource images in the PDF document, e.g.:

pdf.add(PDFTool.getImageFromResource(obj.getGrant(), "MYIMAGERESOURCECODE"));

Excel(R) sheet using Apache POI®

Create sheet fron scratch

Java

import com.simplicite.util.tools.ExcelPOITool;

(...)

ExcelPOITool xls = new ExcelPOITool(); // or ExcelPOITool(true); as of version 4.0, the true argument means using XLSX format
ExcelSheet s = xls.newSheet("MyNewSheet");
ExcelRow r = xls.newRow(0);
ExcelCell c = xls.newCell(0, "Hello World !");
r.add(c);
s.add(r);
xls.add(s);
bytes[] bytes = xls.generateToByteArray();
// Do something with document content...
Rhino JavaScript equivalent
var xls = new ExcelPOITool(); // or ExcelPOITool(true); as of version 4.0, the true argument means using XLSX format
var s = xls.newSheet("MyNewSheet");
var r = xls.newRow(0);
var c = xls.newCell(0, "Hello World !");
r.add(c);
s.add(r);
xls.add(s);
var bytes = xls.generateToByteArray();
// Do something with document content...

Using an existing template sheet

For this advanced usage of the Apache POI lib you need to include the org.apache.poi.hssf.usermodel package explicitly.

Java

import com.simplicite.util.tools.ExcelPOITool;
import org.apache.poi.hssf.usermodel.*;

(...)

ExcelTool xls = new ExcelTool(true);
Sheet sheet = xls.addSheet("Custom");
for (int i = 0; i < rows.size(); i++) {
ExcelRow r = new ExcelRow(i);
String[] row = rows.get(i);
for (int j = 0; j < row.length; j++) {
r.add(xls.newCell(j, row[j]));
}
xls.addRow(sheet, r);
}
Rhino JavaScript equivalent
importPackage(Packages.org.apache.poi.hssf.usermodel);
(...)

var sheet = xls.addSheet("Custom");
for (var i = 0; i < rows.size(); i++) {
var r = new ExcelRow(i);
var row = rows.get(i);
for (var j = 0; j < row.length; j++) {
r.add(xls.newCell(j, row[j]));
}
xls.addRow(sheet, r);
}

In the above example doc is a Simplicité document.

For instance you can get it:

  • from a business object document field: doc = obj.getField("myDoc").getDocument() (obj is the business object)
  • from a publication template: doc = pt.getDocument(obj.getGrant()) (pt is the publication template)
  • Etc.