X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Futil%2FImageMaker.java;fp=src%2Fjalview%2Futil%2FImageMaker.java;h=ed16e110fcfe77664df97d50f573df4237b19e42;hb=c0a7ff7df2df7483f96428206ed40fac728a81f5;hp=7840261350343f5a104ef3eb75a63c441213a96c;hpb=49c9aa7503bfa484359c1486c816052d472e703a;p=jalview.git diff --git a/src/jalview/util/ImageMaker.java b/src/jalview/util/ImageMaker.java index 7840261..ed16e11 100755 --- a/src/jalview/util/ImageMaker.java +++ b/src/jalview/util/ImageMaker.java @@ -31,6 +31,8 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; +import java.awt.print.PageFormat; +import java.awt.print.Paper; import java.io.File; import java.io.FileOutputStream; @@ -40,6 +42,8 @@ import org.jfree.graphics2d.svg.SVGGraphics2D; import org.jfree.graphics2d.svg.SVGHints; import org.jibble.epsgraphics.EpsGraphics2D; +import gnu.jpdf.PDFJob; + public class ImageMaker { public static final String SVG_DESCRIPTION = "Scalable Vector Graphics"; @@ -54,6 +58,10 @@ public class ImageMaker public static final String PNG_DESCRIPTION = "Portable network graphics"; + public static final String PDF_EXTENSION = "pdf"; + + public static final String PDF_DESCRIPTION = "Portable Document Format"; + public static final String HTML_EXTENSION = "html"; public static final String HTML_DESCRIPTION = "Hypertext Markup Language"; @@ -62,6 +70,7 @@ public class ImageMaker SVGGraphics2D g2; + Graphics graphics; FileOutputStream out; @@ -76,12 +85,15 @@ public class ImageMaker private boolean headless; + private PDFJob pdfjob; + public enum TYPE { EPS("EPS", MessageManager.getString("label.eps_file"), getEPSChooser()), PNG("PNG", MessageManager.getString("label.png_image"), getPNGChooser()), - SVG("SVG", "SVG", getSVGChooser()); + SVG("SVG", "SVG", getSVGChooser()), + PDF("PDF","PDF",getPDFChooser()); private JalviewFileChooser chooser; @@ -165,6 +177,10 @@ public class ImageMaker { setupPNG(width, height); } + else if (type == TYPE.PDF) + { + setupPDF(width, height, fileTitle); + } } catch (Exception ex) { @@ -202,6 +218,10 @@ public class ImageMaker out.flush(); out.close(); break; + case PDF: + graphics = null; + pdfjob.end(); + pdfjob = null; } } catch (Exception ex) { @@ -255,6 +275,50 @@ public class ImageMaker } } + void setupPDF(int width, int height, String title) + { + boolean accurateText = true; + + // String renderStyle = jalview.bin.Cache.getDefault("EPS_RENDERING", + // "Prompt each time"); + // + // // If we need to prompt, and if the GUI is visible then + // // Prompt for EPS rendering style + // if (renderStyle.equalsIgnoreCase("Prompt each time") + // && !(System.getProperty("java.awt.headless") != null && System + // .getProperty("java.awt.headless").equals("true"))) + // { + // EPSOptions eps = new EPSOptions(); + // renderStyle = eps.getValue(); + // + // if (renderStyle == null || eps.cancelled) + // { + // setProgressMessage(MessageManager.formatMessage( + // "status.cancelled_image_export_operation", "EPS")); + // return; + // } + // } + // + // if (renderStyle.equalsIgnoreCase("text")) + // { + // accurateText = false; + // } + + try + { + pdfjob = new PDFJob(out, title); + + Paper paper = new Paper(); + paper.setSize(width, height); + PageFormat pf = new PageFormat(); + pf.setPaper(paper); + graphics = pdfjob.getGraphics(pf); + setProgressMessage(MessageManager + .formatMessage("status.export_complete", type.getName())); + } catch (Exception ex) + { + } + } void setupPNG(int width, int height) { bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); @@ -313,6 +377,15 @@ public class ImageMaker return new JalviewFileChooser(PNG_EXTENSION, PNG_DESCRIPTION); } + static JalviewFileChooser getPDFChooser() + { + if (Jalview.isHeadlessMode()) + { + return null; + } + return new JalviewFileChooser(PDF_EXTENSION, PDF_DESCRIPTION); + } + static JalviewFileChooser getEPSChooser() { if (Jalview.isHeadlessMode())