ScribusGenerator icon indicating copy to clipboard operation
ScribusGenerator copied to clipboard

combine output in a single sla

Open berteh opened this issue 10 years ago • 7 comments

To join the efforts on ScribusGenerator and Scribus-Data-Merger we need ScribusGenerator to generate a single sla.

berteh avatar Aug 20 '15 10:08 berteh

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)

berteh avatar Aug 20 '15 13:08 berteh

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?

berteh avatar Aug 21 '15 20:08 berteh

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!

berteh avatar Aug 22 '15 01:08 berteh

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')

berteh avatar Sep 14 '15 19:09 berteh

I've a problem with the single output (Scribus 1.4.6):

  1. Create a new document with 2 single pages
  2. Add a variable to one of a page
  3. Create a csv file containing at least 2 values for the variable
  4. 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

StefanWerner23 avatar May 26 '16 17:05 StefanWerner23

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.

berteh avatar May 26 '16 19:05 berteh

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.

berteh avatar Mar 12 '17 23:03 berteh

Hey there @berteh! This may be closed, if I am not mistaken?

S1SYPHOS avatar Mar 08 '23 09:03 S1SYPHOS

indeed. thanks.

berteh avatar Mar 09 '23 10:03 berteh