I've added a quickstart. https://issues.apache.org/jira/browse/WICKET-6424

Per

> Gesendet: Dienstag, 18. Juli 2017 um 08:16 Uhr
> Von: "Per Newgro" <per.new...@gmx.ch>
> An: users@wicket.apache.org
> Betreff: Aw: Re: Re: Use Resource to transfer SVG to PNG
>
> My main problem is, that i can not send the svg text to the resource. Doing 
> so by request parameters is not an option because the firewall will deny that 
> long cryptic content.
> Therefor i would like to send the svg content through a form.
> 
> So far i have the following:
> 
> In my page-markup (containing the svg) i have
> 
> <form method="POST" wicket:id="svgForm" onSubmit="getSvg(this)">
>   <input type="hidden" value="" wicket:id="svg-data" name="data" />
>   <input id="chart-export" type="submit" class="button secondary" 
> wicket:message="value:misc.chartExport" />
> </form>
> 
> <script type="text/javascript">
>       var getSvg = function(element) {
>               var svgHtml = document.querySelector('#chart-container 
> .highcharts-container').innerHTML;
>               element.querySelector('input[name="data"]').value = svgHtml;
>       }
> </script>
> 
> 
> In my page i have
>               
> add(
>   new WebMarkupContainer("svgForm")
>   .add(AttributeModifier.replace("action", 
> PngResourceReference.url().toString())));
> 
> 
> I've registered a resource by reference
> 
> app.mountResource("/svg2png", new PngResourceReference());
> 
> -----------
> 
> public class PngResourceReference extends ResourceReference {
> 
>       private static final Key KEY = new 
> Key(PngResourceReference.class.getName(), "svg-to-png", null, null, null);
>       
>       public PngResourceReference() {
>               super(KEY);
>       }
> 
>       @Override
>       public IResource getResource() {
>               return new PngResource();
>       }
> 
>       public static CharSequence url() {
>               PageParameters svgParameters = new PageParameters();
>               return 
> RequestCycle.get().urlFor(Application.get().getResourceReferenceRegistry().getResourceReference(KEY,
>  false, false), svgParameters);
>       }
> }
> 
> public class PngResource extends ByteArrayResource {
> 
>       public PngResource() {
>               super("image/png");
>       }
>       
>       @Override
>       protected void configureResponse(ResourceResponse response, Attributes 
> attributes) {
>               super.configureResponse(response, attributes);
>               response.setContentDisposition(ContentDisposition.ATTACHMENT);
>               response.setFileName("chart.png");
>               response.disableCaching();
>       }
> 
>       @Override
>       protected byte[] getData(Attributes attributes) {
>               ByteArrayOutputStream os;
>               try {
>               PNGTranscoder t = new PNGTranscoder();
>               
>               // Set the transcoder input and output.
>               String svg = "something";
>               TranscoderInput input = new TranscoderInput(new 
> StringReader(svg));
>               os = new ByteArrayOutputStream();
>               TranscoderOutput output = new TranscoderOutput(os);
> 
>               // Perform the transcoding.
>               t.transcode(input, output);
>               os.close();
>               } catch (TranscoderException | IOException e) {
>                       throw new RuntimeException(e);
>               }
>               return os.toByteArray();
>       }
> }
> 
> > Gesendet: Montag, 17. Juli 2017 um 15:30 Uhr
> > Von: "Martin Grigorov" <mgrigo...@apache.org>
> > An: "users@wicket.apache.org" <users@wicket.apache.org>
> > Betreff: Re: Re: Use Resource to transfer SVG to PNG
> >
> > On Mon, Jul 17, 2017 at 3:13 PM, Per Newgro <per.new...@gmx.ch> wrote:
> > 
> > > Thanks for your response Martin.
> > >
> > > I tried to make it work the whole day now. But i can not get it to work
> > > with IE11.
> > > There is always a security error. This is a known problem for IE and
> > > canvas.
> > >
> > > I ended up:
> > >
> > > $("#chart-export").on("click", function() {
> > >     var svg = document.querySelector( "svg" );
> > >     var svgData = new XMLSerializer().serializeToString( svg );
> > >
> > >     var canvas = document.createElement( "canvas" );
> > >     document.body.appendChild(canvas);
> > >     var svgSize = svg.getBoundingClientRect();
> > >     canvas.width = svgSize.width;
> > >     canvas.height = svgSize.height;
> > >
> > >     var ctx = canvas.getContext( "2d" );
> > >     ctx.clearRect(0, 0, canvas.width, canvas.height);
> > >
> > >     var img = document.createElement("img");
> > >     img.setAttribute("crossOrigin", "anonymous");
> > >     img.onload = function() {
> > >         ctx.drawImage( img, 0, 0 );
> > >         var a = document.createElement("a");
> > >         a.download = "chart.png";
> > >         a.href = canvas.toDataURL( "image/png" );
> > >         document.body.appendChild(a);
> > >         a.click();
> > >     };
> > >     img.setAttribute("src", "data:image/svg+xml;base64," + 
> > > btoa(unescape(encodeURIComponent(svgData)))
> > > );
> > > });
> > >
> > > So i need to go on the other way. But there my problems still occur.
> > >
> > 
> > What exactly are the problems ?
> > It is not very clear from your first email.
> > 
> > 
> > >
> > > Regards
> > > Per
> > >
> > > > Gesendet: Montag, 17. Juli 2017 um 10:42 Uhr
> > > > Von: "Martin Grigorov" <mgrigo...@apache.org>
> > > > An: "users@wicket.apache.org" <users@wicket.apache.org>
> > > > Betreff: Re: Use Resource to transfer SVG to PNG
> > > >
> > > > Hi,
> > > >
> > > > Wouldn't HTML Canvas API be better solution?
> > > > See https://stackoverflow.com/a/27232525/497381
> > > >
> > > >
> > > > Martin Grigorov
> > > > Wicket Training and Consulting
> > > > https://twitter.com/mtgrigorov
> > > >
> > > > On Mon, Jul 17, 2017 at 10:12 AM, Per Newgro <per.new...@gmx.ch> wrote:
> > > >
> > > > > Hello *,
> > > > >
> > > > > I would like to generate a png from a svg. The transcoding is done by
> > > > > using Batik.
> > > > > So far it works as expected.
> > > > >
> > > > > But i'm not sure how to provide the resulting png (a byte[]) to my
> > > > > frontend.
> > > > >
> > > > > The svg is generate in browser by using highcharts. I would like to
> > > > > provide a button
> > > > > that downloads the transcoded png by sending a request to the
> > > "transcoding
> > > > > resource"
> > > > > and using the svg-dom from browser.
> > > > >
> > > > > Is there someone who did that already once? Can you please give me a
> > > hint
> > > > > how this could work?
> > > > >
> > > > > Thanks for your support
> > > > > Per
> > > > >
> > > > > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > > > > For additional commands, e-mail: users-h...@wicket.apache.org
> > > > >
> > > > >
> > > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > > For additional commands, e-mail: users-h...@wicket.apache.org
> > >
> > >
> > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to