Skip to content

fix: limita nome do periódico a 2 linhas no cabeçalho do PDF - #1323

Merged
Rossi-Luciano merged 1 commit into
scieloorg:masterfrom
Rossi-Luciano:fix/1301-journal-title-two-lines
Sep 4, 2026
Merged

fix: limita nome do periódico a 2 linhas no cabeçalho do PDF#1323
Rossi-Luciano merged 1 commit into
scieloorg:masterfrom
Rossi-Luciano:fix/1301-journal-title-two-lines

Conversation

@Rossi-Luciano

@Rossi-Luciano Rossi-Luciano commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

O que esse PR faz?

Corrige a issue #1301: o nome do periódico no cabeçalho do PDF (página 1 e páginas seguintes) era quebrado em uma linha por palavra, sem limite. Periódicos com nome de 3+ palavras (ex.: "Brazilian Journal of Biology") geravam 4+ linhas empilhadas, aumentando a área reservada ao título e empurrando o resto do cabeçalho da página 1 para baixo.

A correção limita sempre a no máximo 2 linhas: a primeira palavra fica em sua própria linha, e todas as demais são unidas na segunda linha. O comportamento atual para títulos de 2 palavras (ex.: "Acta Amazonica") é preservado sem alteração.

Onde a revisão poderia começar?

packtools/sps/formats/pdf/pipeline/docx.py, nova função _format_journal_title_two_lines, usada em docx_journal_title_pipe (cabeçalho da página 1) e docx_second_header_pipe (cabeçalho das páginas seguintes) — os dois pontos que antes faziam journal_title_text.replace(' ', '\n').

Como este poderia ser testado manualmente?

python -m packtools.sps.formats.pdf_generator \
    -i tests/fixtures/pdf/a4.xml \
    -l tests/fixtures/pdf/layout.docx \
    -o /tmp/a4.pdf --libreoffice-binary libreoffice

Testado também com o artigo real citado na issue (nome de periódico "Brazilian Journal of Biology", 4 palavras): antes ocupava 4 linhas, depois ocupa 2 (ver screenshot).

Testes automatizados: pytest tests/sps/formats/pdf/pipeline/test_docx.py (ou pytest tests/sps/formats/pdf).

Algum cenário de contexto que queira dar?

Confirmei que o parágrafo do cabeçalho ocupa a largura útil total da página (sem tabela/caixa estreita limitando o texto) — o efeito de "uma palavra por linha" era inteiramente proposital no código (masthead empilhado), não uma consequência de espaço insuficiente. Por isso a correção só precisou limitar a contagem de linhas, sem precisar lidar com quebra automática por largura.

Como efeito colateral, corrigi também TestJournalTitlePipe em test_docx.py, que herdava de unittest.TestLoader em vez de unittest.TestCase e por isso nunca era coletada pelo pytest (nenhum teste rodava).

Screenshots

a5_1301_before_after

Quais são os tickets relevantes?

Closes #1301.

Referências

N/A


Segurança da informação (NSI.04)

Este PR manipula dados sensíveis ou pessoais (LGPD)?

  • Sim
  • Não

Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?

  • Sim
  • Não

Este PR introduz, atualiza ou remove dependências de terceiros?

  • Sim
  • Não

Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?

  • Sim
  • Não aplicável a este PR (justifique): Trivy/SonarQube não estão configurados neste repositório (packtools é biblioteca Python, não serviço containerizado). Os gates automáticos reais deste repositório (Snyk e GitGuardian) rodam via CI neste PR.

Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?

  • Sim
  • Não

Este PR expõe novos endpoints, telas ou serviços?

  • Sim
  • Não

Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?

  • Não, nenhum segredo foi commitado
  • Sim

Corrige a issue scieloorg#1301: docx_journal_title_pipe e docx_second_header_pipe
quebravam o nome do periodico em uma linha por palavra
(`.replace(' ', '\n')`), sem limite. Periodicos com nome de 3+ palavras
(ex.: "Brazilian Journal of Biology") geravam 4 linhas empilhadas,
aumentando a area reservada ao titulo e empurrando o resto do
cabecalho da pagina 1 para baixo.

Adiciona _format_journal_title_two_lines: mantem a primeira palavra em
sua propria linha e junta todas as demais na segunda linha, preservando
o comportamento atual para titulos de 2 palavras (ex.: "Acta
Amazonica") e limitando sempre a 2 linhas para titulos maiores. O
paragrafo do cabecalho ocupa a largura util total da pagina (sem
tabela/caixa estreita), entao a segunda linha comporta o restante do
titulo sem quebra adicional nos casos reais do corpus de teste.

Corrige tambem TestJournalTitlePipe em test_docx.py, que herdava de
unittest.TestLoader (nunca era coletada pelo pytest) em vez de
unittest.TestCase.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1ozLVhkofwhRfErRarXy
word on its own line, and every remaining word joined onto the second
line. A one-word title stays on a single line.
"""
words = journal_title_text.split(' ')

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

É mais seguro usar .split(''), pois também remove espaço repetidos (evita que dados imperfeitos causem transtorno)

@Rossi-Luciano
Rossi-Luciano merged commit 732b5d7 into scieloorg:master Sep 4, 2026
2 checks passed
@Rossi-Luciano
Rossi-Luciano deleted the fix/1301-journal-title-two-lines branch September 4, 2026 13:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Ajustar formatação de nome de periódico dinamicamente

2 participants