Usando o Scribus 1.4.6, o seguinte script centro (vertical) alinha o conteúdo de um quadro de texto por Alessandro Rimoldi foi capaz de alinhar verticalmente o texto dentro de um quadro de texto:
- fazendo isso automaticamente mesmo quando o espaçamento entre linhas e / ou o deslocamento da primeira linha é alterado posteriormente
- e com vários parágrafos de estilos diferentes
Aqui está o script (se necessário, uma breve instrução sobre como usar o script segue estas linhas de código):
#!/usr/bin/python
"""
this script adjust the top and bottom distance of a text frame
to exactly put its content in the middle of the frame
@author: alessandro rimoldi
@version: 1.0 / 20090209
@copyright (c) 2009 alessandro rimoldi under the mit license
http://www.opensource.org/licenses/mit-license.html
"""
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)
frame = scribus.getSelectedObject(0)
try:
char_n = scribus.getTextLength(frame)
except scribus.WrongFrameTypeError:
scribus.messageBox('Error:', 'You may only adjust text frames');
sys.exit(1)
if char_n == 0 :
scribus.messageBox('Error:', 'You can\'t adjust an empty frame');
sys.exit(1)
if (scribus.textOverflows(frame) == 1) :
scribus.messageBox('Error:', 'You can\' center a text which is overflowing');
sys.exit(1)
# get some page and frame measure
(x, y) = scribus.getPosition(frame)
(w, h) = scribus.getSize(frame)
original_height = h
(dl, dr, dt, db) = scribus.getTextDistances();
scribus.setTextDistances(dl, dr, 0, 0);
# if the frame doesn't overflow, shorten it to make it overflow
while ((scribus.textOverflows(frame) == 0) and (h > 0)) :
h -= 10
scribus.sizeObject(w, h, frame)
# resize the frame in 10pt steps
while (scribus.textOverflows(frame) > 0) :
h += 10
scribus.sizeObject(w, h, frame)
# undo the latest 10pt step and fine adjust in 1pt steps
h -= 10
scribus.sizeObject(w, h, frame)
while (scribus.textOverflows(frame) > 0) :
h += 1
scribus.sizeObject(w, h, frame)
scribus.sizeObject(w, original_height, frame)
dt = (original_height - h) / 2
scribus.setTextDistances(dl, dr, dt, dt);
Veja como usar o script:
- copie e cole o script em um documento de texto (usando nota de bloco ou bloco de notas, por exemplo) sem formatação de estilo aplicada ao documento;
- salve o documento como um arquivo .py , chamando o nome que quiser;
- no Scribus, selecione o quadro de texto ;
- vá para Script (ao lado de Extras) no menu principal na parte superior e selecione Executar scripts ... ;
- é exibida uma janela Executar script , na qual você seleciona o arquivo .py que você criou;
- pressione OK .
O texto dentro do quadro de texto selecionado será então centralizado verticalmente.
Eu pude experimentar pelo menos duas desvantagens com este script:
- é necessário executar novamente o script se a altura ou a largura do quadro de texto foi modificada
- ele não pode centralizar o texto se estiver transbordando, pois cria algum tipo de margem superior e inferior (talvez não seja ideal para textos grandes)
Este script supera o fato de que o script mencionado na resposta de Jon Bentley não funcionou para mim (no Scribus 1.4. Pelo menos 6), mostrando uma mensagem de erro com a seguinte linha:
ValueError: Text distances out of bounds, must be positive.
que talvez esteja mais relacionado ao documento do que ao próprio script.