package com.revolsys.swing.pdf;
import java.io.File;
import org.apache.jempbox.xmp.XMPMetadata;
import org.apache.jempbox.xmp.XMPSchemaDublinCore;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDMetadata;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import com.revolsys.geometry.model.BoundingBox;
import com.revolsys.logging.Logs;
import com.revolsys.swing.map.Viewport2D;
import com.revolsys.swing.map.layer.Layer;
import com.revolsys.swing.map.layer.LayerRenderer;
import com.revolsys.swing.map.layer.Project;
public class SaveAsPdf {
public static void save() {
final Project project = Project.get();
final String directory = "/Users/paustin/Downloads/";
final File file = new File(directory, project.getName() + ".pdf");
try {
final PDDocument document = new PDDocument();
final Viewport2D viewport = project.getViewport();
BoundingBox boundingBox = viewport.getBoundingBox();
final int width = viewport.getViewWidthPixels();
final int height = viewport.getViewHeightPixels();
final int srid = boundingBox.getCoordinateSystemId();
if (srid == 3857) {
boundingBox = boundingBox
.convert(boundingBox.getGeometryFactory().getGeographicGeometryFactory());
}
final PDRectangle pageSize = new PDRectangle(width, height);
final PDPage page = new PDPage(pageSize);
try (
PdfViewport pdfViewport = new PdfViewport(document, page, project, width, height,
boundingBox)) {
final LayerRenderer<? extends Layer> renderer = project.getRenderer();
renderer.render(pdfViewport);
}
document.addPage(page);
final PDDocumentCatalog catalog = document.getDocumentCatalog();
final PDMetadata metadata = new PDMetadata(document);
catalog.setMetadata(metadata);
// jempbox version
final XMPMetadata xmp = new XMPMetadata();
final XMPSchemaDublinCore xmpSchema = new XMPSchemaDublinCore(xmp);
xmp.addSchema(xmpSchema);
xmpSchema.setAbout("");
metadata.importXMPMetadata(xmp);
document.save(file);
} catch (final Throwable e) {
Logs.error(SaveAsPdf.class, "Unable to create PDF " + file, e);
}
}
}