ScribusGenerator
ScribusGenerator copied to clipboard
combine output in a single sla
To join the efforts on ScribusGenerator and Scribus-Data-Merger we need ScribusGenerator to generate a single sla.
Some pseudo-code on how to do this from retro-engineering sla 1.4.3 format is below (mix of XPath predicates and procedural) I'll have to check the 1.5.x format to see if it's similar... and check if I need to do something for the groups update with PAGEOBJECT@GROUPS.
rowscount = data size (or to-from+1 once range is implemented)
pagescount = /SCRIBUSUTF8NEW/DOCUMENT@ANZPAGES
pageheight = /SCRIBUSUTF8NEW/DOCUMENT@PAGEHEIGHT
vgap = /SCRIBUSUTF8NEW/DOCUMENT@GapVertical (40 by default)
groupscount = max(//PAGEOBJECT@NUMGROUP)
for each data row:
voffset = (pageheight+vgap) * row
copy & substitute all /SCRIBUSUTF8NEW/DOCUMENT/PAGE ; @PAGEYPOS += voffset ; @NUM += pagescount
copy & substitute all /SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT ; @YPOS += voffset ; @OwnPage += pagescount ; (and @NUMGROUP += groupscount if not 0)
/SCRIBUSUTF8NEW/DOCUMENT@ANZPAGES += (pagescount * rowscount)
have a single sla generated, instead of many, is now fully working in Scribus 1.4.3 in branch "singleOutput", form command line (SLA only) and GUI (SLA and/or PDF output).
Could you @garydale and @bjarnesvanberg please test and feed back?
merged in master after satisfactory testing in 1.4.3 and 1.5.1svn Let me know if you find examples that don't work!
for future reference: to update linked frames (as in bb183cf2dce0db603f), add (in the loop):
if version == 1.4*
@NEXTITEM += (objscount * row) if not -1
@BACKITEM += (objscount * row) if not -1
if version == 1.5*
@ItemID += (objscount * row) [modulo max ItemID]
@NEXTITEM += (objscount * row) [modulo max ItemID] if not -1
@BACKITEM += (objscount * row) [modulo max ItemID] if not -1
where objscount = count(.//PAGEOBJECT')
I've a problem with the single output (Scribus 1.4.6):
- Create a new document with 2 single pages
- Add a variable to one of a page
- Create a csv file containing at least 2 values for the variable
- Create a single SLA or PDF with ScribusGenerator
The result is a wrong SLA/PDF, where the content of the 3rd page starts at the 2nd and so on. Is this a bug? In shiftPagesAndObjects, does voffset has to be multiplied by pagescount?
Kind reagrds
Hello @StefanWerner23,
The current implementation relies indeed on the number of pages announced in the document layout to compute the position of generated object in merged mode.
So, if you have 2 single pages of content, kindly select a template with 2 pages (like double folded) before calling the script, and switch it back to single page template after the generation.
This was done on purpose to accommodate the way scribus displays multiple pages of a single document easily... but as it is not flexible nor user friendly, if you want to propose a code change that covers your use case more accurately don't hesitate! Otherwise I'll put it on my to-do list, but with no close deadline.
Thanks for the report. B.
even less practical with new version of scribus where no 3 or 4 page document can be created easily... double-page seems to be the maximum.
Hey there @berteh! This may be closed, if I am not mistaken?
indeed. thanks.