package org.jopendocument.sample;
import java.awt.Graphics2D;
import java.io.File;
import java.io.FileOutputStream;
import org.jopendocument.model.OpenDocument;
import org.jopendocument.renderer.ODTRenderer;
import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfDocument;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;
public class SimplePDFGenerator {
public static void main(String[] args) {
long t1=System.nanoTime();
try {
// Load the ODS file
final OpenDocument doc = new OpenDocument();
doc.loadFrom(SimplePDFGenerator.class.getResource("template/sample-invoice.ods"));
// Open the PDF document
Document document = new Document(PageSize.A4);
File outFile = new File("target/template/invoice.pdf");
PdfDocument pdf = new PdfDocument();
document.addDocListener(pdf);
FileOutputStream fileOutputStream = new FileOutputStream(outFile);
PdfWriter writer = PdfWriter.getInstance(pdf, fileOutputStream);
pdf.addWriter(writer);
document.open();
// Create a template and a Graphics2D object that corresponds with it
Rectangle pageSize = document.getPageSize();
int w = (int) (pageSize.getWidth() * 0.9);
int h = (int) (pageSize.getHeight() * 0.95);
PdfContentByte cb = writer.getDirectContent();
PdfTemplate tp = cb.createTemplate(w, h);
Graphics2D g2 = tp.createPrinterGraphics(w, h, null);
// If you want to prevent copy/paste, you can use
// g2 = tp.createGraphicsShapes(w, h, true, 0.9f);
tp.setWidth(w);
tp.setHeight(h);
// Configure the renderer
ODTRenderer renderer = new ODTRenderer(doc);
renderer.setIgnoreMargins(true);
renderer.setPaintMaxResolution(true);
// Scale the renderer to fit width
renderer.setResizeFactor(renderer.getPrintWidth() / w);
// Render
renderer.paintComponent(g2);
g2.dispose();
// Add our spreadsheet in the middle of the page
float offsetX = (pageSize.getWidth() - w) / 2;
float offsetY = (pageSize.getHeight() - h) / 2;
cb.addTemplate(tp, offsetX, offsetY);
// Close the PDF document
document.close();
} catch (Exception e1) {
e1.printStackTrace();
}
long t2=System.nanoTime();
System.out.println("Time:"+(t2-t1)/(1000*1000)+" ms");
}
}