# HG changeset patch # User Ingo Weinzierl # Date 1274802091 0 # Node ID 7f3154331bc143aa5b80b3021fdbcb24723afc11 # Parent 778d86255d76c6ab28aad54bb01ad325123bd422 Use the chart size/height to export it to pdf. The chart's aspect ratio keeps alive if the size exceeds the maximum page size (issue290). gnv-artifacts/trunk@1124 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 778d86255d76 -r 7f3154331bc1 gnv-artifacts/ChangeLog --- a/gnv-artifacts/ChangeLog Tue May 25 13:57:48 2010 +0000 +++ b/gnv-artifacts/ChangeLog Tue May 25 15:41:31 2010 +0000 @@ -1,3 +1,16 @@ +2010-05-25 Ingo Weinzierl + + Issue290 + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java: + Added chart width and chart height as new parameters for the pdf creation. + + * src/main/java/de/intevation/gnv/exports/ChartExportHelper.java: Don't use + the maximum size of a pdf page to draw the chart but use the parameter + chart width and chart height. Scale the chart down if its size and/or + height exceed the maximum size of the pdf page - the original aspect + ratio keeps alive. + 2010-05-25 Ingo Weinzierl Issue287 diff -r 778d86255d76 -r 7f3154331bc1 gnv-artifacts/src/main/java/de/intevation/gnv/exports/ChartExportHelper.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ChartExportHelper.java Tue May 25 13:57:48 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ChartExportHelper.java Tue May 25 15:41:31 2010 +0000 @@ -9,6 +9,8 @@ import com.lowagie.text.pdf.PdfTemplate; import com.lowagie.text.pdf.PdfWriter; +import de.intevation.artifacts.CallContext; + import de.intevation.artifactdatabase.XMLUtils; import de.intevation.gnv.chart.Chart; @@ -237,17 +239,50 @@ float marginLeft, float marginRight, float marginTop, - float marginBottom + float marginBottom, + CallContext context ) { log.info("export chart as pdf."); if (pageFormat == null) pageFormat = DEFAULT_PAGE_SIZE; + // max size of the chart Rectangle page = PageSize.getRectangle(pageFormat); int pageWidth = (int) (page.getRight(marginRight) - page.getLeft(marginLeft)); int pageHeight = (int) (page.getTop(marginTop) - page.getBottom(marginBottom)); + // the chart width + int chartWidth = (Integer) context.getContextValue("chart.width"); + int chartHeight = (Integer) context.getContextValue("chart.height"); + + int width = 0; + int height = 0; + if (landscape) { + width = pageHeight; + height = pageWidth; + } + else { + width = pageWidth; + height = pageHeight; + } + + if (chartWidth > width) { + log.warn("Width of the chart is too big for pdf -> resize it now."); + double ratio = ((double)width) / chartWidth; + chartWidth *= ratio; + chartHeight *= ratio; + log.debug("Resized chart to " + chartWidth + "x" + chartHeight); + } + + if (chartHeight > height) { + log.warn("Height of the chart is too big for pdf -> resize it now."); + double ratio = ((double)height) / chartHeight; + chartWidth *= ratio; + chartHeight *= ratio; + log.debug("Resized chart to " + chartWidth + "x" + chartHeight); + } + Document document = null; if (landscape) { document = new Document(page.rotate()); @@ -265,20 +300,10 @@ PdfContentByte content = writer.getDirectContent(); - int width = 0; - int height = 0; - if (landscape) { - width = pageHeight; - height = pageWidth; - } - else { - width = pageWidth; - height = pageHeight; - } - PdfTemplate template = content.createTemplate(width, height); Graphics2D graphics = template.createGraphics(width, height); - Rectangle2D area = new Rectangle2D.Double(0.0D, 0.0D,width,height); + Rectangle2D area = new Rectangle2D.Double( + 0.0D, 0.0D, chartWidth, chartHeight); chart.draw(graphics, area); graphics.dispose(); diff -r 778d86255d76 -r 7f3154331bc1 gnv-artifacts/src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java Tue May 25 13:57:48 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java Tue May 25 15:41:31 2010 +0000 @@ -375,6 +375,12 @@ ); } else if (mode.equalsIgnoreCase("pdf")) { + callContext.putContextValue("chart.width", chartWidth); + callContext.putContextValue("chart.height", chartHeight); + callContext.putContextValue("shapes.visible", sVisible); + callContext.putContextValue("lines.visible", lVisible); + callContext.putContextValue("locale", locale); + createPDF( outputStream, parameters, @@ -384,9 +390,6 @@ uuid, "A4", true, - lVisible, - sVisible, - locale, callContext ); } @@ -846,9 +849,6 @@ String uuid, String exportFormat, boolean landscape, - boolean linesVisible, - boolean shapesVisible, - Locale locale, CallContext context ) { Chart chart = getChart( @@ -858,10 +858,10 @@ measurements, dates, getChartResult(uuid, context), - locale, + (Locale) context.getContextValue("locale"), uuid, - linesVisible, - shapesVisible, + Boolean.TRUE.equals(context.getContextValue("lines.visible")), + Boolean.TRUE.equals(context.getContextValue("shapes.visible")), context ); @@ -875,7 +875,8 @@ chart.generateChart(), "A4", PDF_FORMAT_LANDSCAPE, - 50F, 50F, 50F, 50F + 50F, 50F, 50F, 50F, + context ); }