Merging with existing PDF example
-
So this particular script is assigned to a "dummy" template. And it should download remote pdf and replace the template output with it?
In this case, you should do everything in the afterRender and setres.content
with the buffer.You are doing now some magic with
req.data.pdfData.pages
. Not sure what it is.
Based on the error this dummy template is about to be prepended into the main one.
The script is evaluated.
However, it crashes in the handlebars.
How is your template additionally configured?It would save time if you prepare for us a simple demo in the playground.
-
I will prepare the demo and provide it to you in a bit.
As per the detailsreq.data.pdfData.pages
is when we parse the original PDF (from server) the output data is reversed and delivered backward (from last page to first page)
I'm cleaning the whole thing and follow your advices
-
Hi @jan_blaha here's the requested playground, however the
fs
is blocked on the playground (which is totally normal) so you might have to try it out on a local environnement
https://playground.jsreport.net/w/anon/Ze4gsN1JThanks again for your help
-
Did rework the script so it doesn't need
fs
anymore, removed some missing helper that I had used for debug,you will then find 2 template :
sowesign.report
which is the dummy and only execute the scriptsowesign-signature.report
which call the pdf-utils extension with the first template supposed to be merged with
if you execute first template, everything behave as it should
if you exeute second template, you get an error :Error: Timeout error during executing script at Timeout._onTimeout (/app/node_modules/script-manager/lib/manager-servers.js:152:23) at ontimeout (timers.js:498:11) at Timer.unrefdHandle (timers.js:611:5)
hope this can help you
-
Hi @jan_blaha ,
So I managed to make it somehow work (??? no idea why, but now I can get an almost proper merge)
Now the problem I've seen is that any special charaters (such aséèà'
...) from the original PDF seem to disappear upon merging which is a bit annoying, does pdf-utils change anything regarding the cahrset (I believe it is not, just asking)In addition :
I'm trying to work on that suggestion from @bjrmatos https://github.com/jsreport/jsreport/issues/470 and while I got the same result upon merging, I do manage to succesfully upload a pdf into jsreport workflow, without having to pass by script. However, in this version, it need the client to add the PDF url into the data they send as$pdfInput
(taking from the$pdf
node that we can use from jsreport), if that can interest you later for jsreport let me knowThanks!
-
Now the problem I've seen is that any special charaters (such as éèà' ...) from the original PDF seem to disappear upon merging
Hm I can't replicate it. See here
https://playground.jsreport.net/w/anon/ibbWubwr
Are you able to change that demo to make it disappear chars?
-
Hi Jan!
I cannot reproduce with the given exemple as it happens only from the imported PDF
but you can look there as they do disapear on this one (execute sowesign.report by itself first so you can compare)https://playground.jsreport.net/w/anon/Ze4gsN1J
, also I just tried with another PDF from another source and this time charaters that were missing in the first PDF were all present here, I would assume that it might be to how the original PDF was generated (by Word if I got it right) I did however tried with 2 others PDF both generated with word : first one failed because of a max call stack reached :
2019-01-17T16:06:40.622Z - info: Starting rendering request 1 (user: null) 2019-01-17T16:06:40.625Z - info: Rendering template { name: sowesign.signature.report, recipe: chrome-pdf, engine: handlebars, preview: true } 2019-01-17T16:06:40.627Z - debug: Inline data specified. 2019-01-17T16:06:40.628Z - debug: Resources not defined for this template. 2019-01-17T16:06:40.631Z - debug: Executing script sowesign.signature.script 2019-01-17T16:06:40.801Z - debug: Base url not specified, skipping its injection. 2019-01-17T16:06:40.818Z - debug: Rendering engine handlebars 2019-01-17T16:06:41.000Z - debug: Compiled template not found in the cache, compiling 2019-01-17T16:06:41.002Z - debug: Executing recipe chrome-pdf 2019-01-17T16:06:41.249Z - debug: Converting with chrome HeadlessChrome/72.0.3617.0 using dedicated-process strategy 2019-01-17T16:06:41.516Z - debug: Chrome will wait for network iddle before printing 2019-01-17T16:06:46.237Z - debug: Running chrome with params {"printBackground":false,"marginTop":"","height":"297.3mm","width":"210mm","waitForNetworkIddle":true,"margin":{"top":""}} 2019-01-17T16:06:46.550Z - info: pdf-utils is starting pdf processing2019-01-17T16:06:46.947Z - debug: Detected 1 pdf operation(s) to process 2019-01-17T16:06:46.948Z - debug: Running pdf operation merge 2019-01-17T16:06:46.949Z - info: Starting rendering request 2 (user: null) 2019-01-17T16:06:46.951Z - info: Rendering template { name: sowesign.report, recipe: import-pdf, engine: none, preview: true } 2019-01-17T16:06:46.952Z - debug: Inline data specified. 2019-01-17T16:06:46.953Z - debug: Resources not defined for this template. 2019-01-17T16:06:46.955Z - debug: Base url not specified, skipping its injection. 2019-01-17T16:06:46.960Z - debug: Rendering engine none 2019-01-17T16:06:46.983Z - debug: Compiled template not found in the cache, compiling 2019-01-17T16:06:46.984Z - debug: Executing recipe import-pdf 2019-01-17T16:06:47.002Z - debug: Skipping storing report. 2019-01-17T16:06:47.021Z - info: Rendering request 2 finished in 72 ms2019-01-17T16:06:47.364Z - warn: Error when processing render request Maximum call stack size exceeded RangeError: Maximum call stack size exceeded at String.replace (<anonymous>) at new PDFName (D:\DEV\www\Groupe_8\jsreport\node_modules\jsreport-pdfjs\lib\object\name.js:34:17) at Function.parse (D:\DEV\www\Groupe_8\jsreport\node_modules\jsreport-pdfjs\lib\object\name.js:94:12) at Function.parse (D:\DEV\www\Groupe_8\jsreport\node_modules\jsreport-pdfjs\lib\object\dictionary.js:71:27) at Object.exports.parse (D:\DEV\www\Groupe_8\jsreport\node_modules\jsreport-pdfjs\lib\object\value.js:20:30) at Function.parse (D:\DEV\www\Groupe_8\jsreport\node_modules\jsreport-pdfjs\lib\object\object.js:68:28) at parseObject (D:\DEV\www\Groupe_8\jsreport\node_modules\jsreport-pdfjs\lib\object\reference.js:67:20) at PDFReference.get [as object] (D:\DEV\www\Groupe_8\jsreport\node_modules\jsreport-pdfjs\lib\object\reference.js:13:17) at Function.addObjectsRecursive (D:\DEV\www\Groupe_8\jsreport\node_modules\jsreport-pdfjs\lib\parser\parser.js:61:35) at D:\DEV\www\Groupe_8\jsreport\node_modules\jsreport-pdfjs\lib\parser\parser.js:78:18 2019-01-17T16:06:47.372Z - warn: Error during processing request at http://localhost:5490/api/report/sowesign.signature.report
this one was quite important and did contain lot of image so I will look deeper into that.
The second one was shorter and containing lot of special char but some did disapeared again or were replaced (é => i for example). I will try with some more PDF from different sources maybe it is more about how word is encoding the pdf first, which cause conflict during merge operation ?
-
I think I was able to resolve the issue with encoding. I post here when it is released.
For the second error
max call stack reached
I need the pdf which causes it.
Unfortunately, the pdf spec is too complex, so we need to resolve this case by case.
-
Hi @jan_blaha , thanks for your help!!
I understand the problem of PDF spec, many sources won't implement it the same way, we have to deal with PDF coming from various clients in another product and it is true that we have some conflict while attempting to parse them.
Regarding the pdf I will send it to you by email, I did made the document shorter durong the test but still encounter the error, if you need the full version let me know
Thank you again!
-
It is more a razor/asp.net question than jsreport question.
I am not using razor so not sure.I would guess you parse the json using json.net into a dynamic object and pass it as dynamic model to the view.
However, as I said, not an expert here.
-
Hi Jan, sorry for the delay,
I'm not sure I understand clearly, is it about the last PDF I sent you? Regarding the reason as of why is
max call stack reached
?
I do not use razor nor any asp.net personnaly so that is why i'm quite confused
-
Ups. Sorry. I posted the answer to the wrong topic.
Please ignore it.
-
Hi @jan_blaha ,
I read somewhere you were talking about releasing jsreport 2.4.0 quite soon, will this update include the patch you did mention before or do you still need to look deeper into it ?Thanks for your help!!
-
Hi, I am not sure when we will do the full release. We got overwhelmed a bit with other stuff now.
However, you can get the patch I mentioned earlier using install from git master.npm i jsreport/jsreport-pdf-utils
-
Hi,
Thanks for the feedback, I'll look at it right away.Thanks again!!
-
Works like a charm, thanks a lot!!