[scribus] Baseline Offset
Gregory Pittman
gpittman at iglou.com
Wed May 15 02:00:30 UTC 2013
On 05/14/2013 09:48 PM, Gregory Pittman wrote:
> On 05/14/2013 09:08 PM, amruginn-scribus at yahoo.com wrote:
>> Hello,
>>
>> I've been searching the mailing list archives, and the interwebs, to
>> identify a solution to my problem.
>>
>> I'm creating a PDF document using Scripter, with the script being
>> generated from a C++ program. I'm creating a lot of table'd data, and
>> eventually will be putting borders around the cells.
>>
>> With that in mind, I was using version 1.3.8 on a PCLinuxOS machine
>> which was slower than the second machine I'm now trying to work on
>> which is running Linux Mint (LMDE 2013.03) and 1.4.0 (I also grabbed
>> 1.4.2.). The script works fine in both versions with the Linux Mint
>> machine being faster, obviously.
>>
>> My dilemma is that I was using baseline offset of -15% for my text
>> boxes which gave a nice vertical centering of sorts. (I read the
>> posts and wiki entry regarding vertical centering and realize that
>> shouldn't be managed in a DTP.) As well, baseline offset is something
>> I can define in a Scribus Template document's character styles, and
>> then use that style in my Scripter script.
>>
>> In the 1.3.8 version, the baseline offset works as desired, but when
>> I move to 1.4.0 (and 1.4.2) the baseline offset needs to be a huge
>> number to do anything, and then it goes beyond the size of the box.
>> (Assume 8pt font, 10pt box, and baseline offset goes -60%, and the
>> text doesn't show up.)
>>
>> I notice that the First Line Offset (maximum ascent, font ascent, or
>> line spacing) sort of works if I use font ascent, unfortunately, that
>> isn't something I can set in Scripter nor a character style.
>> Therefore, it's not a practical solution for me.
>>
>> Is this a bug now, or was it a bug then, and not working as-designed?
>> I'm also attempting to compile the recent (and eventually historical)
>> source but I have some dependencies I haven't loaded, to see if I can
>> either identify it, or add a solution for my needs.
>>
>>
> Maybe I don't understand what you're doing, but it seems a rather
> clumsy way to center vertically.
>
> Here is a fragment from a script I wrote to center text vertically in
> a frame by adjusting the Top text distance value. This is the logic
> part that centers the text in the frame. It requires fixed linespacing
> to work properly.
>
> lines = scribus.getTextLines(textbox)
> distances = scribus.getTextDistances(textbox)
> linespace = scribus.getLineSpacing(textbox)
> dimensions = scribus.getSize(textbox) # (width, height)
> if (scribus.textOverflows(textbox, 1) > 0):
> scribus.messageBox('User Error', "This frame is already
> overflowing", scribus.ICON_WARNING, scribus.BUTTON_OK)
> sys.exit(2)
> newtopdist = (dimensions[1] - linespace * lines)/2
> scribus.setTextDistances(distances[0],distances[1],newtopdist,distances[3],textbox)
>
> scribus.moveObject(-4,0,textbox)
> scribus.moveObject(4,0,textbox)
>
> The last 2 lines compensate for a display problem in Scribus. If
> they're not there you may not see the text shifted as it should. It's
> only a display problem, since if you save your document and reload,
> you see the text shifted. I also noted that if you move the frame, the
> text moves in the display to where it should be, so the script has a
> built-in shift, then unshift to manage the same thing.
>
I just realized while trying out the error detection in the middle that
you need to Redraw to not mess up your display -- the text disappears.
The script as a whole Redraws at the end, but you miss that when you
sys.exit.
lines = scribus.getTextLines(textbox)
distances = scribus.getTextDistances(textbox)
linespace = scribus.getLineSpacing(textbox)
dimensions = scribus.getSize(textbox) # (width, height)
if (scribus.textOverflows(textbox, 1) > 0):
scribus.messageBox('User Error', "This frame is already
overflowing", scribus.ICON_WARNING, scribus.BUTTON_OK)
scribus.setRedraw(True)
sys.exit(2)
newtopdist = (dimensions[1] - linespace * lines)/2
scribus.setTextDistances(distances[0],distances[1],newtopdist,distances[3],textbox)
scribus.moveObject(-4,0,textbox)
scribus.moveObject(4,0,textbox)
Hopefully, the alignment of the lines will come out Ok in the mail list.
scribus.setTextDistances... was supposed to line up with the rest.
Greg
More information about the scribus
mailing list