Comments (3)
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.
There is a couple ways:
- 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.
- 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)
- 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.
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)
- [FRG] Add ability to set border color through GUI
- [FRG] Add ability to set border style through GUI
- [FRG] Add a way to set exact position on page HOT 2
- [FRG] Remove requirement of “report group” column in data HOT 4
- [FRG] Fix X & Y coordinates changing from what they’re set to on save
- [FRG] Fix align: right going off the screen
- [FRG] Fix clearing font size field wiping out report HOT 2
- [FRG] Improve band line visual positioning
- [FRG] Update right-aligned element position after margin changes HOT 2
- [FRG] Expose a focus handler in the options object HOT 2
- [FRG] Fix async print function adding done() when it shouldn’t HOT 1
- newPage() doesn't cause header to be rendered on the new page HOT 2
- Feature Request: Add option to saveState() and restoreState() for font settings only HOT 1
- Fix band() adding extra margin when multiple cells wrap
- Use fluentreports with VUE HOT 1
- Buffer is not defined, Platform React JS HOT 2
- PDFKit RangeError: Maximum call stack size exceeded HOT 3
- ES6 Support HOT 3
- v1.4.2 removes the ./generator directory from the NPM package HOT 1
- How to implement Typescript support? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fluentreports.