{"id":400,"date":"2008-07-26T00:20:32","date_gmt":"2008-07-26T03:20:32","guid":{"rendered":"http:\/\/meiradarocha.jor.br\/news\/?p=400"},"modified":"2008-10-22T17:05:22","modified_gmt":"2008-10-22T20:05:22","slug":"automatizando-diagramacao-de-noticias-com-scribus-e-python","status":"publish","type":"post","link":"https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/","title":{"rendered":"Automatizando diagrama\u00e7\u00e3o de not\u00edcias com Scribus e Python"},"content":{"rendered":"<div id=\"attachment_471\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-471\" class=\"size-medium wp-image-471\" title=\"Mat\u00e9ria montada automaticamente\" src=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829-300x181.png\" alt=\"Mat\u00e9ria montada automaticamente pelo script.\" width=\"300\" height=\"181\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829-300x181.png 300w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829-150x90.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829-1024x619.png 1024w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829.png 1280w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-471\" class=\"wp-caption-text\">Mat\u00e9ria montada automaticamente pelo script.<\/p><\/div>\n<p>Que tal abrir um quadro de texto no <a href=\"http:\/\/www.scribus.net\/\">Scribus<\/a>, rodar um <em>script <\/em>e obter rapidamente uma mat\u00e9ria jornal\u00edstica montada, com foto, legenda e cr\u00e9dito da foto? E que tal levar todo um sistema editorial num <em>pen drive<\/em>? (Editor de texto, editor de fotos, paginador, sa\u00edda em PDF\/X-3). E que tal tudo isto com ferramentas gratuitas e de c\u00f3digo aberto?<\/p>\n<p>Essa foi minha id\u00e9ia ao aprender <span style=\"color: #000000;\"><strong>Python e <span>Scribus Scripting<\/span><\/strong>.<\/span> Levar um sistema editorial de categoria profissional num pen drive. Instalei o <a href=\"http:\/\/www.winpenpack.com\/main\/download.php?view.34\">X-Scribus<\/a>, um Scribus especial para pen drives. Ele j\u00e1 tem o Ghostscript, Python e tudo o que \u00e9 necess\u00e1rio para rodar em qualquer computador com Windows. Existe mais uma vers\u00e3o, o <a href=\"http:\/\/sourceforge.net\/projects\/portablescribus\/\">Portable Scribus 1.3.3.12<\/a>, mas ele me apresentou problemas na visualiza\u00e7\u00e3o de impress\u00e3o: n\u00e3o permitia a sele\u00e7\u00e3o de chapas (plates) individuais &#8212; ciano, magenta, amarelo ou preto, coisa importante para o ensino de sele\u00e7\u00e3o de cores.<\/p>\n<h3>Imagens<\/h3>\n<p>Para automatizar o <strong>Scribus<\/strong>, uma das primeiras provid\u00eancias \u00e9 permitir ao <strong>Python <\/strong>do <strong>Scribus <\/strong>a manipula\u00e7\u00e3o de imagens. Para isso, usei <a href=\"http:\/\/www.pythonware.com\/products\/pil\/\">PIL (Python Image Library)<\/a>.<!--more--><\/p>\n<p>No <strong>Linux<\/strong>, o <strong>Scribus <\/strong>usa o Python normal do sistema. Instale as bibliotecas PIL da forma usual de seu sabor de Linux. No Windows, o instalador do <strong>Python Image Library<\/strong> precisa de certas <strong>chaves no registro do Windows<\/strong> para saber em que lugar est\u00e1 instalado o sistema Python. Eu defini estas chaves para a pasta do <strong>Scribus<\/strong>, que \u00e9 onde roda o interpretador <strong>Python <\/strong>no <strong>Windows<\/strong>. Ao baixar o <strong>PIL<\/strong>, cuide as vers\u00f5es: no <strong>Scribus<\/strong> vers\u00e3o 1.3.3 est\u00e1vel,\u00a0 o <strong>Python <\/strong>\u00e9 vers\u00e3o 2.4. No <strong>Scribus <\/strong>1.3.4 Beta, o <strong>Python <\/strong>\u00e9 vers\u00e3o 2.5.<\/p>\n<p>Para registrar o Python do Scribus, o meu arquivo reg tem o seguinte:<\/p>\n<pre>Windows Registry Editor Version 5.00\r\n\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python]\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\Pythoncore]\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\Pythoncore\\2.4]\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\Pythoncore\\2.4\\InstallPath]\r\n@=\"<span style=\"color: #ff0000;\">c:\\\\SD\\\\PortableApps\\\\X-Scribus\\\\Bin\\\\Scribus\\\\<\/span>\"\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\Pythoncore\\2.4\\PythonPath]\r\n@=\"<span style=\"color: #ff0000;\">c:\\\\SD\\\\PortableApps\\\\X-Scribus\\\\Bin\\\\Scribus\\\\Lib\\\\;c:\\\\SD\\\\PortableApps\\\\X-Scribus\\\\Bin\\\\Scribus\\\\DLLs\\\\<\/span>\"\r\n\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\Pythoncore\\2.5]\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\Pythoncore\\2.5\\InstallPath]\r\n@=\"<span style=\"color: #ff0000;\">c:\\\\SD\\\\Bin\\\\Scribus\\\\<\/span>\"\r\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\Pythoncore\\2.5\\PythonPath]\r\n@=\"<span style=\"color: #ff0000;\">c:\\\\SD\\\\Bin\\\\Scribus\\\\Lib\\\\;c:\\\\SD\\\\Bin\\\\Scribus\\\\DLLs\\\\<\/span>\"<\/pre>\n<p>Se voc\u00ea precisar registrar, copie este c\u00f3digo, mude os caminhos para as pastas para casarem com seu sistema (em vermelho) e grave como texto simples, com a termina\u00e7\u00e3o .reg. D\u00ea dois clics no arquivo para registrar as chaves no registro do Windows.<\/p>\n<p>Depois de instalado o PIL, se as bibliotecas de imagem forem corretamente reconhecidas, n\u00e3o haver\u00e1 erros ao rodar o <em>script <\/em>de montagem de mat\u00e9rias.<\/p>\n<blockquote><p>Repare que instalei tudo usando o HD. Depois de tudo instalado, copiei a pasta inteira para o pen drive. No caso, copiei a pasta X-Scribus para a pasta PortableApps (que \u00e9 o padr\u00e3o de aplica\u00e7\u00f5es port\u00e1teis que uso) do pen drive.<\/p><\/blockquote>\n<p>A seguir coloquei o script na pasta de scripts do <strong>Scribus<\/strong>, que no meu caso coloquei em <strong>c:\\SD\\PortableApps\\X-Scribus\\Bin\\Scribus\\Scripts<\/strong>.<\/p>\n<p>No in\u00edcio do <em>script <\/em>existem algumas vari\u00e1veis que podem ser modificadas pelo usu\u00e1rio, como a largura da valeta (<em>gutter<\/em>, espa\u00e7o entre as colunas).<\/p>\n<p>O script funciona assim: desenhe um ret\u00e2ngulo ou selecione um. V\u00e1 ao menu Scripts, procure e rode este <em>script<\/em>. Aparecem diversas janelinhas de di\u00e1logo perguntando:<\/p>\n<ul>\n<li>Em <strong>quantas colunas<\/strong> ser\u00e1 dividida a \u00e1rea de colunas da mat\u00e9ria? Escolha 2 ou mais.<\/li>\n<li>Qual a <strong>largura do espa\u00e7o entrecolunas<\/strong> (<em>gutter <\/em>ou valeta)?<\/li>\n<li>Qual o <strong>corpo (tamanho) do sobret\u00edtulo<\/strong>?<\/li>\n<li>Qual o <strong>corpo do subt\u00edtulo<\/strong>?<\/li>\n<li><strong>Quantas fotos<\/strong> tem a mat\u00e9ria? Por enquanto, o script s\u00f3 aceita uma.<\/li>\n<li><strong>Quantas colunas ocupa a foto<\/strong> (de largura)? A foto \u00e9 posicionada ao lado da primeira coluna de texto e agrupada com quadros para legenda e para cr\u00e9dito. As bibliotecas PIL s\u00e3o usadas para isto. As fun\u00e7\u00f5es PIL medem a foto escolhida e o script calcula a altura do quadro de foto. Mais tarde, uso a tecla <kbd>CTRL<\/kbd> + <kbd>Y<\/kbd> para abrir o editor de texto interno do Scribus para editar os dois elementos (como se faz no Adobe inDesign). Na primeira linha vai a legenda e na linha de baixo vai o cr\u00e9dito.<\/li>\n<\/ul>\n<blockquote><p>Falta fazer as rotinas para manipular fotos no caso de uma mat\u00e9ria em apenas uma coluna. Se voc\u00ea escolher uma coluna, a foto ser\u00e1 montada ao lado da mat\u00e9ria.<\/p><\/blockquote>\n<p>A seguinte seq\u00fc\u00eancia de quadros mostra como funciona o <em>script<\/em>.<\/p>\n<div class=\"gallery\"><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_012329\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"90\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012329-150x90.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-451\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012329-150x90.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012329-300x181.png 300w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012329-1024x619.png 1024w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012329.png 1280w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-451'>\n\t\t\t\tDesenhe um ret\u00e2ngulo\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_012400\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"59\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012400-150x59.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-465\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012400-150x59.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012400-300x119.png 300w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012400-620x250.png 620w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012400-640x246.png 640w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_012400.png 734w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-465'>\n\t\t\t\tEscolha o script.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_013538\/'><img loading=\"lazy\" decoding=\"async\" width=\"143\" height=\"150\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013538-143x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-452\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013538-143x150.png 143w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013538.png 152w\" sizes=\"auto, (max-width: 143px) 100vw, 143px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-452'>\n\t\t\t\tResponda quantas colunas ter\u00e1 a mat\u00e9ria\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_013619\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"148\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013619-150x148.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-453\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013619-150x148.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013619-36x36.png 36w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013619.png 175w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-453'>\n\t\t\t\tResponda a medida da valeta, normalmente 5mm\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_013634\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"127\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013634-150x127.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-454\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013634-150x127.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013634.png 203w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-454'>\n\t\t\t\tResponda o corpo do sobret\u00edtulo (cartola ou chap\u00e9u ou cabe\u00e7a)\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_013626\/'><img loading=\"lazy\" decoding=\"async\" width=\"148\" height=\"150\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013626-148x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-455\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013626-148x150.png 148w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013626-36x36.png 36w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013626.png 157w\" sizes=\"auto, (max-width: 148px) 100vw, 148px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-455'>\n\t\t\t\tResponda o corpo do t\u00edtulo\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_013705\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"60\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013705-150x60.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-466\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013705-150x60.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013705-300x120.png 300w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013705-620x250.png 620w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013705.png 734w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-466'>\n\t\t\t\tPrevis\u00e3o do texto a importar\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_013711\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"143\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013711-150x143.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-467\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013711-150x143.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013711.png 166w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-467'>\n\t\t\t\tEscolha quantas fotos vai colocar (ainda n\u00e3o funciona)\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_013727\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"60\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013727-150x60.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-468\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013727-150x60.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013727-300x120.png 300w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013727-620x250.png 620w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013727.png 734w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-468'>\n\t\t\t\tPrevis\u00e3o de fotos a importar\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_013747\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"111\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013747-150x111.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-470\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013747-150x111.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013747.png 213w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-470'>\n\t\t\t\tEscolha quantas colunas de largura ficar\u00e1 a foto\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/meiradarocha.jor.br\/news\/2008\/07\/26\/automatizando-diagramacao-de-noticias-com-scribus-e-python\/capture_26072008_013829\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"90\" src=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829-150x90.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-471\" srcset=\"https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829-150x90.png 150w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829-300x181.png 300w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829-1024x619.png 1024w, https:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2008\/07\/capture_26072008_013829.png 1280w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-471'>\n\t\t\t\tMat\u00e9ria montada automaticamente pelo script.\n\t\t\t\t<\/dd><\/dl>\n\t\t\t<br style='clear: both' \/>\n\t\t<\/div>\n\n<p>O quadro para t\u00edtulo vai agrupado com o quadro para as colunas. Para editar o texto, uso a tecla <kbd>CTRL<\/kbd> + <kbd>Y<\/kbd>. Para importar texto, seleciono o grupo e uso <kbd>CTRL<\/kbd> + <kbd>D<\/kbd> (como no PageMaker e InDesign).<\/p>\n<pre>#!\/usr\/bin\/env python2.4\r\n# -*- coding: utf-8 -*-\r\n\r\n\"\"\"\r\nBuild a newspaper story\r\nBy prof. MS. Jos\u00e9 Antonio Meira da Rocha\r\nmailto:joseantoniorocha@gmail.com\r\nhttp:\/\/meiradarocha.jor.br\r\nLicen\u00e7a GPL\r\n\"\"\"\r\n\r\nimport sys\r\n\r\n###########################\r\n# Assegura que est\u00e1 rodando\r\n# dentro do Scribus\r\n###########################\r\ntry:\r\n\timport scribus\r\nexcept ImportError,err:\r\n\tprint \"This Python script is written for the Scribus scripting interface.\"\r\n\tprint \"It can only be run from within Scribus.\"\r\n\tsys.exit(1)\r\n\r\n# Carrega algumas constantes Scribus usadas neste script\r\nfrom scribus import UNIT_POINTS, LINE_SOLID, JOIN_MITTER, BUTTON_OK, ICON_WARNING\r\n\r\n<span style=\"color: #008000;\">#########################\r\n# USER IMPORTS GO HERE  #\r\n#########################\r\n\r\n#####################################\r\n# Usu\u00e1rio pode mudar estes par\u00e2metros\r\n#####################################<\/span>\r\nnumeroDeColunasPadrao = \"3\"\r\nentrecolunasPadrao = \"14.1732\"  # 5mm\r\ncorpoDeTituloPadrao = \"48\"\r\ncorpoPadraoDoSobretitulo = \"18\"\r\nproporcaoDeEntrelinha = 1.0\r\n\r\n<span style=\"color: #008000;\">##########################################\r\n# Constantes que N\u00c3O devem ser modificadas<\/span>\r\nAROUND_FRAME = 1\r\nBOUNDING_BOX = 2\r\nCONTOUR_LINE = 3 \r\n\r\n<span style=\"color: #008000;\">######################\r\n# Locale strings\r\n# Textos para tradu\u00e7\u00e3o\r\n######################<\/span>\r\npedirParaAbrirDoc = \"&lt;h2&gt;Abra um documento&lt;\/h2&gt;\" \\\r\n\t+\"Ops! Abra um documento antes \\nde rodar este comando.\"\r\npedirParaAbrirQuadro = \"&lt;h2&gt;Desenhe um quadro&lt;\/h2&gt;\\n\" \\\r\n\t+\"Ops! Desenhe ou selecione um &lt;b&gt;quadro&lt;\/b&gt;\\n\" \\\r\n\t+\"na \u00e1rea em que voc\u00ea quer montar a mat\u00e9ria.\"\r\n#\r\nlabelDeColunas = 'Colunas' #Number of columns\r\nmensagemDeColunas = '&lt;h2&gt;Colunas&lt;\/h2&gt;&lt;p&gt;Quantas colunas?&lt;\/p&gt;'  #How many columns?\r\n#\r\nlabelDeCorpoDeTitulo = \"Corpo do t\u00edtulo\" #quadroDeTitulo\r\nmensagemDeCorpoDeTitulo = \"&lt;h2&gt;Corpo do t\u00edtulo&lt;\/h2&gt;&lt;p&gt;Qual&amp;nbsp;o&amp;nbsp;corpo&amp;nbsp;do&amp;nbsp;t\u00edtulo?&lt;\/p&gt;\" #What the quadroDeTitulo size?\r\n#\r\nlabelDeValetas = \"Valetas\"\r\nmensagemDeValetas = \"&lt;h2&gt;Valetas&lt;\/h2&gt;&lt;p&gt;Qual&amp;nbsp;o&amp;nbsp;tamanho&amp;nbsp;da&amp;nbsp;valeta?\\n(Espa\u00e7o&amp;nbsp;entrecolunas)\"\r\n#\r\nlabelDeSobretitulo = \"Corpo do sobret\u00edtulo\"\r\nmensagemDeSobretitulo = \"&lt;h2&gt;Corpo do sobret\u00edtulo&lt;\/h2&gt;\\n&lt;p&gt;&lt;b&gt;Qual&amp;nbsp;o&amp;nbsp;corpo&amp;nbsp;do&amp;nbsp;sobret\u00edtulo?&lt;\/b&gt;\\n\" \\\r\n\t+ \"(coloque&amp;nbsp;zero&amp;nbsp;se&amp;nbsp;n\u00e3o&amp;nbsp;houver&amp;nbsp;sobret\u00edtulo)\"\r\n#\r\ntextFlowsAroundFrame = 'Abra a imagem'\r\nfiltroDeImagens = 'Arquivos de imagens (*.jpg *.png *.tiff *.tif)'\r\n#\r\nlabelDeImportarTexto = \"Abra o texto\"\r\nfiltroDeArquivosTexto = \"Arquivos de texto (*.txt *.html)\"\r\n#\r\nlabelDeLarguraDeImagem = \"Largura da imagem\"\r\nmensagemDeLarguraDeImagem = \"&lt;h2&gt;Largura&amp;nbsp;da&amp;nbsp;Imagem&lt;\/h2&gt;\\nQuantas&amp;nbsp;colunas&amp;nbsp;a&amp;nbsp;imagem&amp;nbsp;ocupar\u00e1?\"\r\nlarguraDeColunasPadrao = \"1\"\r\n#\r\nlabelDeImagem = \"Quantas fotos\"\r\nmensagemDeImagem = \"&lt;h2&gt;Quantas fotos?&lt;\/h2&gt;\\n&lt;p&gt;Quantas&amp;nbsp;fotos&amp;nbsp;a&amp;nbsp;mat\u00e9ria&amp;nbsp;tem?\"\r\nnumeroDeImagemPadrao = \"1\"\r\n\r\nlabelDeQuadroDeTitulo = \"Montar mat\u00e9ria\"\r\n\r\nlabelErroDeImportacao = \"N\u00e3o importei o arquivo\"\r\nmsgDeErroDeImportacao = \"&lt;h2&gt;N\u00e3o importei o arquivo&lt;\/h2&gt;&lt;p&gt;Desculpe-me, n\u00e3o importei o arquivo por algum detalhe de formato incompat\u00edvel ou arquivo n\u00e3o encontrado. &lt;b&gt;Sem problema&lt;\/b&gt;, tente de novo manualmente nais tarde.&lt;\/p&gt;\"\r\n\r\nlabelAbreDoc = \"Abra um documento\"\r\ndizAbreDoc = \"&lt;h2&gt;Abra um documento&lt;\/h2&gt;&lt;p&gt;Por favor, este comando exige que voc\u00ea abra um documento.&lt;\/p&gt;\"\r\n\r\n<span style=\"color: #008000;\">####################\r\n# End Locale strings\r\n####################<\/span>\r\n\r\ntry:\r\n\timport Image\r\nexcept ImportError,err:\r\n\tprint \"This Python script is written for the PIL graphic interface.\"\r\n\tprint \"It should be instaled in Scribus Python tree.\"\r\n\tsys.exit(1)\r\n\r\ndef <span style=\"color: #ff0000;\"><strong>pedeNumeroDeColunas<\/strong><\/span>():\r\n\t\"\"\"Pede n\u00famero de colunas de texto que ter\u00e1 a mat\u00e9ria\"\"\"\r\n\r\n\tnumeroDeColunas = scribus.valueDialog(\r\n\t\tlabelDeColunas,\r\n\t\tmensagemDeColunas,\r\n\t\tnumeroDeColunasPadrao\r\n\t)\r\n\tif not numeroDeColunas:\r\n\t\tsys.exit()\r\n\ttry:\r\n\t\treturn int(numeroDeColunas)\r\n\texcept:\r\n\t\treturn numeroDeColunasPadrao\r\n\r\ndef <span style=\"color: #ff0000;\">pedeCorpoDoTitulo<\/span>():\r\n\t\"\"\"Pede tamanho das letras (corpo) do t\u00edtulo, em pontos tipogr\u00e1ficos.\"\"\"\r\n\tcorpoDeTitulo = scribus.valueDialog(labelDeCorpoDeTitulo, mensagemDeCorpoDeTitulo, corpoDeTituloPadrao)\r\n\tif not corpoDeTitulo:\r\n\t\tsys.exit()\r\n\ttry:\r\n\t\treturn float(eval(corpoDeTitulo))\r\n\texcept:\r\n\t\treturn float(corpoDeTituloPadrao)\r\n\r\ndef <span style=\"color: #ff0000;\">pedeEntrecolunas<\/span>():\r\n\t\"\"\"Pede o espa\u00e7o entre as colunas de texto (gitter, valeta), em pontos tipogr\u00e1ficos\"\"\"\r\n\tentrecolunas = scribus.valueDialog(labelDeValetas, mensagemDeValetas, entrecolunasPadrao)\r\n\tif not entrecolunas:\r\n\t\tsys.exit()\r\n\ttry:\r\n\t\treturn float(entrecolunas)\r\n\texcept:\r\n\t\treturn entrecolunasPadrao\r\n\r\ndef <span style=\"color: #ff0000;\">pedeCorpoDoSobretitulo<\/span>():\r\n\t\"\"\"Pede tamanho das letras (corpo) do sobret\u00edtulo, em pontos tipogr\u00e1fico\"\"\"\r\n\tcorpoDoSobretitulo = scribus.valueDialog(labelDeSobretitulo, mensagemDeSobretitulo, corpoPadraoDoSobretitulo)\r\n\tif not corpoDoSobretitulo:\r\n\t\tsys.exit()\r\n\ttry:\r\n\t\treturn float(eval(corpoDoSobretitulo))\r\n\texcept:\r\n\t\treturn float(corpoPadraoDoSobretitulo)\r\n\r\ndef <span style=\"color: #ff0000;\">pedeImagem<\/span>():\r\n\t\"\"\"Pergunta por fotos na mat\u00e9ria\"\"\"\r\n\ttemImagem = scribus.valueDialog(labelDeImagem, mensagemDeImagem, numeroDeImagemPadrao)\r\n\tif not temImagem:\r\n\t\tsys.exit()\r\n\ttry:\r\n\t\treturn temImagem\r\n\texcept:\r\n\t\treturn temImagem\r\n\r\ndef <span style=\"color: #ff0000;\">pedeTexto<\/span>(quadroDeTitulo):\r\n\t\"\"\"Load text file\"\"\"\r\n\r\n\tsourceCharcode = 'iso-8859-15' # change it to ur language\r\n\t# Di\u00e1logo de procurar arquivo\r\n\ttextFile = scribus.fileDialog(labelDeImportarTexto,filtroDeArquivosTexto,\"\", haspreview=1, issave=True) # issave=False shows \"Save\" button\r\n\tif textFile:\r\n\t\ttry:\r\n\t\t\tt = open(textFile).read()\r\n\t\t\tt = unicode(t, sourceCharcode)\r\n\t\texcept:\r\n\t\t\tscribus.messageBox(\r\n\t\t\t\tlabelErroDeImportacao,\r\n\t\t\t\tmsgDeErroDeImportacao,\r\n\t\t\t\tICON_WARNING,\r\n\t\t\t\tBUTTON_OK\r\n\t\t\t)\r\n\t\t\tt=\"\"\r\n\t\t\treturn t\r\n\telse:\r\n\t\tt=\"\"\r\n\r\n\treturn t\r\n\r\ndef <span style=\"color: #ff0000;\">flow<\/span>(frame,mode):\r\n\t\"\"\"Compatibiliza Scribus 1.3.3 e 1.3.4\"\"\"\r\n\ttry:\r\n\t\tscribus.textFlowsAroundFrame(frame, mode) # Scribus 1.3.3\r\n\texcept:\r\n\t\tscribus.textFlowMode(frame, mode)\t\t # Scribus 1.3.4\r\n\r\ndef <span style=\"color: #ff0000;\">pedeColunasDeImagem<\/span>():\r\n\t\"\"\"Solicita a quantidade de colunas que a foto vai ocupar.\"\"\"\r\n\tcolunasDaFoto = scribus.valueDialog(\r\n\tlabelDeLarguraDeImagem,\r\n\tmensagemDeLarguraDeImagem,\r\n\tlarguraDeColunasPadrao\r\n\t)\r\n\tif not colunasDaFoto:\r\n\t\tsys.exit()\r\n\ttry:\r\n\t\treturn float(eval(colunasDaFoto))\r\n\texcept:\r\n\t\treturn float(larguraDeColunasPadrao)\r\n\r\ndef <span style=\"color: #ff0000;\">pedeFoto<\/span>():\r\n\t\"\"\"\tEscolhe arquivo de foto\r\n\tscribus.fileDialog('caption', ['filter', 'defaultname',haspreview, issave])\"\"\"\r\n\r\n\t# Abre di\u00e1logo para escolha de arquivo\r\n\tarquivoDaFoto = scribus.fileDialog(\r\n\t\ttextFlowsAroundFrame,\r\n\t\tfiltroDeImagens,\r\n\t\t\"\",  # Nome default do arquivo\r\n\t\thaspreview=1,\r\n\t\tissave=True\r\n\t)\r\n\r\n\t# Tenta abrir arquivo fornecido\r\n\ttry:\r\n\t\tfoto = Image.open(arquivoDaFoto)  # uso da biblioteca PIL\r\n\texcept:\r\n\t\tscribus.messageBox(\r\n\t\t\tlabelErroDeImportacao,\r\n\t\t\tmsgDeErroDeImportacao,\r\n\t\t\tICON_WARNING,\r\n\t\t\tBUTTON_OK\r\n\t\t)\r\n\t\tfoto = \"\"\r\n\treturn foto,arquivoDaFoto\r\n\r\ndef <span style=\"color: #ff0000;\">montaQuadroDaFoto<\/span>(quadroDeColunas):\r\n\t\"\"\"Build a image frame with credit and legenda\r\n\tbased in text frame number of columns\"\"\"\r\n\r\n\t#\r\n\tfoto,arquivoDaFoto = pedeFoto()\r\n\ttry:\r\n\t\tlarguraDaFoto,alturaDaFoto = foto.size  # para pegar o tamanho da imagem em pixels\r\n\texcept:\r\n\t\tlarguraDaFoto,alturaDaFoto = 4,3  # Se n\u00e3o conseguir, define propor\u00e7\u00e3o 4 por 3\r\n\r\n\t# Escolhe quantas colunas a foto vai \"abrir\"\r\n\tcolunasDaFoto = pedeColunasDeImagem()\r\n\r\n\t# Calcula largura da foto\r\n\tentrecoluna = scribus.getColumnGap(quadroDeColunas)\r\n\tcolunasDeTexto = scribus.getColumns(quadroDeColunas)\r\n\r\n\t# Define o tamanho da foto\r\n\tlarguraDoQuadroDeColunas,alturaDoQuadroDeColunas = scribus.getSize(quadroDeColunas)\r\n\r\n\tlarguraDaColuna = (larguraDoQuadroDeColunas - (entrecoluna*(colunasDeTexto-1))) \/ colunasDeTexto\r\n\r\n\t# calcula posi\u00e7\u00e3o da imagem\r\n\tquadroDeColunasEsquerda, quadroDeColunasTopo = scribus.getPosition(quadroDeColunas)\r\n\r\n\t# Posiciona foto a partir da segunda coluna de texto\r\n\tquadroDaFotoEsquerda = quadroDeColunasEsquerda + larguraDaColuna + entrecoluna\r\n\tquadroDaFotoTopo = quadroDeColunasTopo\r\n\r\n\t# Calcula largura e altura da imagem\r\n\tlarguraDoQuadroDaFoto = colunasDaFoto * larguraDaColuna + (entrecoluna * (colunasDaFoto - 1))\r\n\talturaDoQuadroDaFoto = larguraDoQuadroDaFoto * alturaDaFoto \/ larguraDaFoto\r\n\r\n\t# Cria quadro de imagem com a foto\r\n\tquadroDaFoto = scribus.createImage(quadroDaFotoEsquerda, quadroDaFotoTopo, larguraDoQuadroDaFoto, alturaDoQuadroDaFoto)\r\n\r\n\t# Define fluxo para \"Afastar texto\"\r\n\tflow(quadroDaFoto, AROUND_FRAME) \r\n\r\n\t# Define formata\u00e7\u00e3o gr\u00e1fica do quadro de foto\r\n\tscribus.setLineWidth(\t   0.8, quadroDaFoto)\r\n\tscribus.setLineColor(   \"Black\", quadroDaFoto)\r\n\tscribus.setLineShade(\t   100, quadroDaFoto)\r\n\tscribus.setLineStyle(LINE_SOLID, quadroDaFoto)\r\n\tscribus.setLineJoin(JOIN_MITTER, quadroDaFoto)\r\n\ttry:\r\n\t\tscribus.loadImage(arquivoDaFoto, quadroDaFoto)\r\n\texcept:\r\n\t\tprint \"N\u00e3o pude carregar a imagem.\"\r\n\r\n\t# Calcula escala da imagem para caber no quadro\r\n\tescalaDaFoto = larguraDoQuadroDaFoto \/ larguraDaFoto\r\n\r\n\t# Resescalona quadro de imagem\r\n\tscribus.scaleImage(escalaDaFoto, escalaDaFoto, quadroDaFoto)\r\n\r\n\t<span style=\"color: #008000;\">########################################\r\n\t# LEGENDA\r\n\t########################################<\/span>\r\n\t# Calcula dimens\u00f5es do quadro de legenda\r\n\tquadroDaLegendaTopo = quadroDaFotoTopo + alturaDoQuadroDaFoto\r\n\talturaDoQuadroDaLegenda = entrecoluna * 2\r\n\t# Cria quadro de legenda\r\n\tquadroDaLegenda = scribus.createText(quadroDaFotoEsquerda, quadroDaLegendaTopo, larguraDoQuadroDaFoto, alturaDoQuadroDaLegenda)\r\n\t#\r\n\t# Melhoria: Colocar leitor de input para escrever legenda\r\n\r\n\t# Liga \"afastador de texto\"\r\n\tflow(quadroDaLegenda, AROUND_FRAME)\r\n\r\n<span style=\"color: #008000;\">\t##########################################\r\n\t# CREDITO\r\n\t##########################################<\/span>\r\n\t# Define medidas do quadro para cr\u00e9dito de foto\r\n\tquadroDaFotoDireita = quadroDaFotoEsquerda + larguraDoQuadroDaFoto\r\n\tquadroDaFotoBaixo = quadroDaFotoTopo + alturaDoQuadroDaFoto\r\n\t# Cria quadro de cr\u00e9dito\r\n\tquadroDoCredito = scribus.createText(quadroDaFotoDireita, quadroDaFotoBaixo, alturaDoQuadroDaFoto, entrecoluna)\r\n<span style=\"color: #008000;\">\t#\r\n\t# Melhoria: Colocar input de cr\u00e9dito para escrever credito\r\n\t#   if not finalizado\r\n\t#\t  processaNaoFinalizado()<\/span>\r\n\r\n\t# Liga \"afastador de texto\"\r\n\tflow(quadroDoCredito, AROUND_FRAME)\r\n\r\n\t# Agrupa os elementos foto, legenda e cr\u00e9dito\r\n\tscribus.groupObjects([quadroDaFoto, quadroDaLegenda, quadroDoCredito])\r\n\r\n\t# Se tiver a legenda e cr\u00e9dito no mesmo arquivo que o texto da mat\u00e9ria\r\n\t#scribus.linkTextFrames(quadroDeTitulo, quadroDaLegenda)\r\n\r\n\t# Liga os textos da legenda e dos cr\u00e9ditos\r\n\tscribus.linkTextFrames(quadroDaLegenda, quadroDoCredito)\r\n\r\n\t# Se tiver a legenda e cr\u00e9dito no mesmo arquivo que o texto da mat\u00e9ria\r\n\t#scribus.linkTextFrames(credit, quadroDeColunas)\r\n\r\n\t# Deixa o quadro de legenda \"em p\u00e9\"\r\n\tscribus.rotateObject(90, quadroDoCredito)\r\n\r\ndef <span style=\"color: #ff0000;\">montaMateria<\/span>(espacoDaMateria):\r\n\t\"\"\" Manipula um bloco de not\u00edcia \"\"\"\r\n\r\n\t# Pega as coordenadas X e Y do objeto selecionado\r\n\tesquerdaDoQuadro, topoDoQuadro = scribus.getPosition(espacoDaMateria)\r\n\t# Pega a largura e altura do quadro\r\n\tlarguraDoQuadro, alturaDoQuadro = scribus.getSize(espacoDaMateria)\r\n\t# Apaga objeto original, que era usado s\u00f3 pra marcar o espa\u00e7o.\r\n\tscribus.deleteObject(espacoDaMateria)\r\n\r\n\t# Cria um bloco de texto com as medidas extremas do objeto\r\n\t# E deleta o objeto (que pode ser at\u00e9 uma linha)\r\n\tquadroDeTitulo = scribus.createText(esquerdaDoQuadro, topoDoQuadro, larguraDoQuadro, alturaDoQuadro)\r\n\r\n\t# Pergunta pelo n\u00famero de colunas\r\n\tnumeroDeColunas = pedeNumeroDeColunas()\r\n\r\n\t# Pergunta pelo espa\u00e7o entre-colunas\r\n\tentrecolunas = pedeEntrecolunas()\r\n\r\n\t# Pergunta pelo tamanho do t\u00edtulo em pontos\r\n\tcorpoDeTitulo = pedeCorpoDoTitulo()\r\n\r\n\t# Pergunta pelo tamanho do antet\u00edtulo\r\n\tcorpoDoSobretitulo = pedeCorpoDoSobretitulo()\r\n\r\n<span style=\"color: #008000;\">\t#######################################\r\n\t# T\u00cdTULO\r\n\t#######################################<\/span>\r\n\t# Calcula o tamanho total dos t\u00edtulos\r\n\talturaDoQuadroDeTitulo = (corpoDeTitulo + corpoDoSobretitulo) * proporcaoDeEntrelinha\r\n\tdireitaDoQuadro = esquerdaDoQuadro + larguraDoQuadro\r\n\t# Redimensiona quadro de t\u00edtulo\r\n\tscribus.sizeObject(larguraDoQuadro, alturaDoQuadroDeTitulo, quadroDeTitulo)\r\n\t# Define o tipo de fluxo de texto: \"afastar texto\"\r\n\tflow(quadroDeTitulo, AROUND_FRAME)\r\n\r\n<span style=\"color: #008000;\">\t#######################################\r\n\t# COLUNAS DE TEXTO\r\n\t#######################################<\/span>\r\n\t# Define medidas do quadro de textos\r\n\ttopoDasColunas = topoDoQuadro + alturaDoQuadroDeTitulo\r\n\talturaDasColunas = alturaDoQuadro - alturaDoQuadroDeTitulo\r\n\t# Cria quadro de texto\r\n\tquadroDeColunas = scribus.createText(esquerdaDoQuadro, topoDasColunas, larguraDoQuadro, alturaDasColunas)\r\n\t# Define o fluxo de texto como \"afastar texto\"\r\n\tflow(quadroDeColunas, AROUND_FRAME)\r\n\t# Determina colunagem\r\n\tscribus.setColumnGap(entrecolunas, quadroDeColunas)\r\n\tscribus.setColumns(numeroDeColunas, quadroDeColunas)\r\n\r\n<span style=\"color: #008000;\">\t#######################################\r\n\t# LINCA TEXTOS\r\n\t# Linca quadros de t\u00edtulo e de texto\r\n\t#######################################<\/span>\r\n\tscribus.linkTextFrames(quadroDeTitulo,quadroDeColunas)\r\n\tstoryGroup = scribus.groupObjects([quadroDeTitulo, quadroDeColunas])\r\n\r\n<span style=\"color: #008000;\">\t#######################################\r\n\t# PEGA TEXTO\r\n\t#######################################<\/span>\r\n\t# Quadro de escolha de arquivo\r\n\ttext = pedeTexto(quadroDeTitulo)\r\n\r\n\ttry:\r\n\t\t#scribus.insertText(text,-1,quadroDeTitulo)  # para ANEXAR ao final em vez de substituir\r\n\t\tscribus.setText(text,quadroDeTitulo)\r\n\texcept:\r\n\t\ttext=\"Sobret\u00edtulonT\u00edtulonAutor da mat\u00e9rianComplemento ao autornPrimeiro Par\u00e1grafonOutros par\u00e1grafosOutros par\u00e1grafos...\"\r\n\t\tscribus.setText(text,quadroDeTitulo)\r\n\r\n<span style=\"color: #008000;\">\t#######################################\r\n\t# PEGA FOTO\r\n\t#######################################<\/span>\r\n\t# Ask image\r\n\ttemImagem = pedeImagem()\r\n\tif temImagem:\r\n\t\tmontaQuadroDaFoto(quadroDeColunas)\r\n\r\ndef <span style=\"color: #ff0000;\">manipulaSelecao<\/span>():\r\n\t\"\"\" Gerencia objetos selecionados \"\"\"\r\n\r\n\t# Pega o objeto selecionado\r\n\tstory = scribus.getSelectedObject(0)\r\n\t# Se h\u00e1 apenas um objeto selecionado\r\n\tif story and scribus.selectionCount() == 1 :\r\n\t#\tif story:\r\n\t\tmontaMateria(story)\r\n\t\tscribus.docChanged(True)\r\n\telse:\r\n\t\t#Melhoria pra o futuro:\r\n\t\t#por default, abrir uma mat\u00e9ria do tamanho da p\u00e1gina\r\n\t\t# De momento, s\u00f3 avisa\r\n\t\tscribus.messageBox(\r\n\t\t\tlabelDeQuadroDeTitulo,\r\n\t\t\tpedirParaAbrirQuadro,\r\n\t\t\tICON_WARNING,\r\n\t\t\tBUTTON_OK\r\n\t\t)\r\n\r\ndef <span style=\"color: #ff0000;\">manipulaDocumento<\/span>():\r\n\t\"\"\"Manipula documentos \"\"\"\r\n\t# Se h\u00e1 documento aberto\r\n\tif scribus.haveDoc():\r\n\t\t#Desliga redraw\r\n\t\tscribus.setRedraw(False)\r\n\t\t#Guarda unidades do usu\u00e1rio # Save unit\r\n\t\tunit = scribus.getUnit()\r\n\t\t#Define novas unidades como \"pontos tipogr\u00e1fico\"\r\n\t\tscribus.setUnit(UNIT_POINTS)\r\n\r\n<span style=\"color: #008000;\">\t\t#############################\r\n\t\t# Manipula objeto selecionado\r\n\t\t#############################<\/span>\r\n\t\tmanipulaSelecao()\r\n\r\n\t\t#Recupera medidas do usu\u00e1rio\r\n\t\tscribus.setUnit(unit)\r\n\telse:  # Sen\u00e3o h\u00e1 documento aberto, avisa.\r\n\t\tscribus.messageBox(\r\n\t\t\tlabelAbreDoc,\r\n\t\t\tdizAbreDoc,\r\n\t\t\tICON_WARNING,\r\n\t\t\tBUTTON_OK\r\n\t\t)\r\n\r\ndef <span style=\"color: #ff0000;\">myCode<\/span>():\r\n\t\"\"\" User code \"\"\"\r\n<span style=\"color: #008000;\">\t#########################\r\n\t#  USER CODE GOES HERE  #\r\n\t#########################<\/span>\r\n\r\n\t# Gerencia documento\r\n\tmanipulaDocumento()\r\n\r\n<span style=\"color: #008000;\">\t#########################\r\n\t#  USER CODE ENDS HERE  #\r\n\t#########################<\/span>\r\n\r\ndef <span style=\"color: #ff0000;\">main<\/span>(argv):\r\n\t\"\"\"Default main entry point\"\"\"\r\n\tmyCode()\r\n\r\ndef <span style=\"color: #ff0000;\">main_wrapper<\/span>(argv):\r\n\ttry:\r\n\t\tscribus.statusMessage(\"Rodando o script...\")\r\n\t\tscribus.progressReset()\r\n\t\tmain(argv)\r\n\tfinally:\r\n\t\tif scribus.haveDoc():\r\n\t\t\tscribus.setRedraw(True)\r\n\t\tscribus.statusMessage(\"\")\r\n\t\tscribus.progressReset()\r\n\r\nif __name__ == '__main__':\r\n\tmain_wrapper(sys.argv)<\/pre>\n<h3>Bibliografia<\/h3>\n<ol>\n<li>ROSSUM, Guido Van. Python Tutorial. Cap\u00edtulo 4, More control flow tools, <strong>FOR statements<\/strong>. Site web dispon\u00edvel em: &lt;<a href=\"http:\/\/www.python.org\/doc\/2.4.4\/tut\/node6.html#SECTION006200000000000000000\">http:\/\/www.python.org\/doc\/2.4.4\/tut\/node6.html#SECTION006200000000000000000<\/a>&gt;. Acesso em 25. jul. 2008.<\/li>\n<li>SCRIBUS. Arquivo de ajuda. Vers\u00e3o 1.3.3.12. Cap\u00edtulo For Developers, se\u00e7\u00e3o Scripter API, p\u00e1gina <strong>Page Comands<\/strong>. Dispon\u00edvel no programa atrav\u00e9s da tecla F1.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Que tal abrir um quadro de texto no Scribus, rodar um script e obter rapidamente uma mat\u00e9ria jornal\u00edstica montada, com foto, legenda e cr\u00e9dito da foto? E que tal levar [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,25,15,39,14,16],"tags":[],"class_list":["post-400","post","type-post","status-publish","format-standard","hentry","category-computadores","category-diagramacao","category-editoracao","category-programacao","category-python","category-scribus"],"_links":{"self":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/comments?post=400"}],"version-history":[{"count":0,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/400\/revisions"}],"wp:attachment":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/media?parent=400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/categories?post=400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/tags?post=400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}