Git Product home page Git Product logo

Comments (3)

leoncc avatar leoncc commented on May 27, 2024 1

Hi,

I'm using the MEAN stack (obviously with AngularJS, Node and MongoDB):

In client controller inject $window at the top where you declare the controller. Then the function below is called for instance from a view with ng-click on a hyperlink or image):

        $scope.generatePDF = function() {
            $http.get('daily-orders-report',{headers: {}, responseType: 'arraybuffer'})
                .success(function (data) {
                    var file = new Blob([data], {type: 'application/pdf'});
                    var fileURL = URL.createObjectURL(file);
                    $window.open(fileURL);
                }
            );
        };

Server side in controller - note that res the response is actually a writable stream, so you don't have to work very hard by creating a writeable stream on the server. So your route on your server side would call generatePDF:

exports.generatePDF = function(req, res) { .........
...............
        var rpt = new Report(res)
            .autoPrint(false) // Optional
            .pageHeader( ['Employee Hours'] )// Optional
            .finalSummary( ['Total Hours:', 'hours', 3] )// Optional
            .userdata( {hi: 1} )// Optional
            .data( mydata ) // REQUIRED
            .sum( 'hours' ) // Optional
            .detail( daydetail ) // Optional
            .totalFormatter( totalFormatter ) // Optional
            .fontSize(8); // Optional

Hope it helps
Leon

from fluentreports.

NathanaelA avatar NathanaelA commented on May 27, 2024

There is a couple ways:

  1. You can write it to disk; so that whatever http(s) server you are using can then stream it as a normal file with the pdf mime type. Then after sending the file you can either delete or keep the file. Depending on which http(s) server you are using this can be very easy to do.
  2. You can also write the pdf to a buffer or a stream, then stream the buffer or stream to the client using either http(s) or sockets. But if the reports are REALLY large; you run the risk of using all your memory on the server while it is generating it and storing it in the buffer/stream before it streams it (since everything stays in memory until you close the stream)
  3. I haven't tested it; but theoretically the code was written such that you should be able to build the pdf completely on the client side in their browser as long as you stream the data needed to make the report over to the client from the server. One of these days, I'm going to double check this works -- but I don't see any reason why it won't unless I have a bug somewhere...

I am personally using the first option in a project, as it not only allows the server/client to negotiate the optimal method to transmit the file. But it totally eliminates the possibility of running out of memory when generating very large reports for several people at the same time.

from fluentreports.

NathanaelA avatar NathanaelA commented on May 27, 2024

I should mention; their are two ways of streaming it from fluentReports rather than writing it to a file.
1st, if you pass a string with the value of "buffer" (instead of a filename) as the first parameter of the constructor.

var rpt = new Report("buffer", options);    
rpt.render(function(err, data) {
  // data will be the entire pdf in a buffer
});

The second way is if you pass a stream object that supports piping in:
i.e.

var ws = new WritableStream();  // Whatever writable stream object you want to use
var rpt = new Report(ws, options);
rpt.render(function(err) {
  // The ws (stream object) should have been fully filled and the pdf was fully pipped to this stream by the point this callback is called.
});

from fluentreports.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.