[scribus] recalculation of overflow is not correct

Gregory Pittman gpittman at iglou.com
Mon Mar 2 14:29:08 CET 2009


Chantal Rosmuller wrote:
> Hi, I am writing a script that loops through textboxes in a document and 
> resizes them until the frame fits. However after resizing and re evaluating 
> the overflow the script gives me the exact same number. How is that possible 
> and what can I do about it?
>
>
> # ---------------------------------------------------#
> # check of het script vanuit scribus wordt gestart   #
> #----------------------------------------------------#
>
> import sys
> try:
>    import scribus
>
> except ImportError:
>    print "This script only works from within Scribus"
>    sys.exit(1)
>
> #Loop through the pages 
> page = 1
> pagenum = scribus.pageCount()
> while (page <= pagenum):
>      scribus.gotoPage(page)
>      #go to the next page in the next loop
>      page += 1
>      #and get all pageitems, this function gets
>      #name, obejcttype and ordre for eacht item
>      #
>      #objecttype 4 is textframe
>      ItemsOnpage = scribus.getPageItems()
>      #print pageitmes for debugging puprposes
>      ItemsOnpage
>      #count the number of items
>      NumberItemsOnpageTotal=len(ItemsOnpage)
>      #loop through items
>      NumberItemsOnpage = 1
>      while (NumberItemsOnpage <= NumberItemsOnpageTotal):
> 	#whe have arrays of itemproperties (name, obejcttype and ordre)
> 	#within arrays with items, first get the current itme number in the array
> 	#current item number is NumberItemsOnpage but counting in an array
> 	# starts with zero so subtract one
> 	NumberItemsOnpageArraynumber=NumberItemsOnpage-1
> 	#now move to the right item
> 	CurrentItem=ItemsOnpage[NumberItemsOnpageArraynumber]
> 	#the first value in the itemarray is the itemname
> 	CurrentItemName=CurrentItem[0]
> 	print CurrentItemName
> 	#the secund value is the itemtype
> 	CurrentItemType=CurrentItem[1]
>         print CurrentItemType
> 	#type 4 is textbox
> 	if CurrentItemType == 4:
> 		print "this is a textbox"
> 		selectObject(CurrentItemName)
> 		OverflowChar = scribus.textOverflows(CurrentItemName)
> 		print "initial overflow"
> 		print OverflowChar
> 		if OverflowChar > 0:
> 			(CurrentItemwidth, CurrentItemheight) = scribus.getSize(CurrentItemName)
> 			InitialAddition=1000
> 			ItemHeight=CurrentItemheight+InitialAddition
> 			scribus.sizeObject(CurrentItemwidth,ItemHeight,CurrentItemName)
> 			##OverflowChar = 0
> 			##print "overflow zero"
> 			##print OverflowChar
> 			scribus.selectObject(CurrentItemName)
> 			OverflowChar = scribus.textOverflows(CurrentItemName)
> 			print "overflow after first adjustment"
> 			print OverflowChar
> 	#go to the next item
> 	NumberItemsOnpage += 1
>
> _______________________________________________
>   
You think you have resized, but apparently not.

I would try these things in sequence:

1. stick a getSize() command after your sizeObject() command. If nothing 
else, it will let you know if you actually did resize. It may also cause 
the sizeObject to take effect.
2. put a redrawAll command after the sizeObject() command.

Greg




More information about the scribus mailing list