Align to left page margin
Jump to navigation
Jump to search
#!/usr/bin/python """ adjust placement of text frames when the insertion of a page has scrambled the previous left/right "order" @author: alessandro rimoldi @version: 0.1 / 20100304 @copyright (c) 2010 alessandro rimoldi under the mit license http://www.opensource.org/licenses/mit-license.html @bugs fix scripter API documentation: for double sided pages, getPageMargins() returns inner and outer margins instead of left and right """ import sys try: import scribus except ImportError: print "This script only works from within Scribus" sys.exit(1) # check that the selection is one text frame and get that frame frame_n = scribus.selectionCount() if frame_n == 0 : scribus.messageBox('Error:', 'No frame selected') sys.exit(1) elif frame_n > 1 : scribus.messageBox('Error:', 'You may select only one frame') sys.exit(1) # store the current unit and use pt unit_current = scribus.getUnit() scribus.setUnit(scribus.UNIT_POINTS) (mT, mI, mO , mB) = scribus.getPageMargins() frame = scribus.getSelectedObject(0) (x, y) = scribus.getPosition(frame) (w, h) = scribus.getSize(frame) p = scribus.currentPage() n = scribus.pageCount() # @todo: invert if first page is left if (p % 2) == 0 : dX = mO - x else : dX = mI - x if dX == 0: scribus.messageBox('Error:', 'The current frame is already correctly placed') sys.exit(1) for i in range(p, n + 1) : scribus.gotoPage(i) # scribus.messageBox('Message:', str(i)) (iT, iI, iO , iB) = scribus.getPageMargins() iItem = scribus.getPageItems() for jItem in iItem: jFrame = jItem[0] (jX, jY) = scribus.getPosition(jFrame) (jW, jH) = scribus.getSize(jFrame) if (i % 2) == 0 : djX = iO - j else : djX = iI - jX # scribus.messageBox('Message:', 'i:'+str(i)+'\ndjX:'+str(djX)) # the item must be at the same height as the original have the same width # and have a distance from the left margin equal to the difference # between left and right margin if (round(jY, 2) == round(y, 2)) and (round(jW, 2) == round(w, 2)) and (abs(round(djX, 2)) == abs(round(dX, 2))) : scribus.moveObject(djX, 0, jFrame) # restore the user's unit scribus.gotoPage(p) scribus.setUnit(unit_current)