Saída PDF com espaços corretos em exemplos de código

3

Eu tenho usado rst2pdf e pandoc para converter o seguinte reStructuredText em PDF:

This is a python example::

  def main():
      print("Hello World!")

  if __name__ == '__main__':
      main()

And one for YAML::

   server:
      name: ts0
      location: paris

embora os dois programas usem um mecanismo diferente para gerar PDF ( pandoc exige que você instale o TeX para isso), o resultado é um arquivo PDF, do qual você não pode copiar e colar exemplos de código corretamente:

Ocódigodestacado(fundoverde)nãopossuiespaçosporqueosespaçosvaziossãogeradosnessesarquivosPDFcomdeslocamentos.

Copieecoleosresultadosemcódigoformatadoefeioparamuitosidiomas,masparalinguagensdeprogramaçãocomoOccamePythoneparaarquivosdeconfiguraçãonoYAML,issorealmentealteraosignificado.Sevocêtiversortequerealmentequebraascoisasevocêpercebe,masoexemploYAML,porexemplo,tambémestácorretosemosespaçosnoiníciodalinha,sótemumsignificadodiferente.

EssesexemplosdecódigoemcódigotambémacontecemnosdocumentosPDFgeradospelositereadthedocs.

Sevocêpegarasaídade:

pandocexample.rst-oexample.epub

evisualizaroarquivodeumapáginaresultante,vocêpodecopiarecolarocódigocorretamente.Sevocêconverteresseexample.epubcomcalibre(versão2.55.0)pormeiodesuainterfacedeusuário,obteráumarquivoPDFdoqualvocêpodecopiacorretamenteocódigo(comespaços),masoPDFresultanteconsistede3páginas.

Tentandoconverterapartirdalinhadecomando:

ebook-convertexample.epubexample.pdf

resultaemumaexceçãoderenderização,adicionandoaopção--old-pdf-engineaconversãofunciona,masvocêaindatemumPDFde3páginasemvezdeumaúnicapágina.

ConvertendoviaHTML:

rst2htmlexample.rst>example.html;ebook-convertexample.htmlexample.pdfpandocexample.rst-oexample.html;ebook-convertexample.htmlexample.pdf

dá-lheumcódigoselecionávelcorreto:

, mas ao colar não há espaços para o recuo e até mesmo o espaço entre Hello e World desaparece. Além disso, em arquivos maiores, você tem quebras de página em lugares indesejados e o layout precisaria de ajustes extensos por meio de folhas de estilo.

Eu tentei converter via .odt , mas acabou em arquivos PDF com texto completamente não selecionável.

Atendendo aos seguintes requisitos para a saída em PDF:

    fragmentos de código
  • corretamente selecionados com espaços
  • resultados semelhantes no layout ao de rst2pdf ou readthedocs

existem ferramentas de linha de comando para gerar um arquivo PDF, começando com um arquivo .rst ou algum outro formato de marcação?

    
por Anthon 24.04.2016 / 16:09

1 resposta

1

Você pode usar o seguinte pipeline

txttopdf.sh:

enscript -B -p- | ps2pdf -dCompressPages=false - -

para gerar um PDF que preserve o espaçamento principal da fonte. A opção especial ps2pdf faz com que use a parte de conteúdo do PostScript intermediário, deixando objetos de texto bem recuados no PDF. Você pode verificar isso abrindo-o com um editor de texto simples; a parte do conteúdo está em algum lugar no final.

No entanto, ainda depende do visualizador de PDF se descarta esses espaços principais ou não. Por exemplo, evince , assim como o antigo acroread do, e eles não me permitem selecionar o espaço em branco inicial no visualizador. Isso também é o mesmo se eu substituir os espaços por espaço não-separável (de ISO-8859-1).

Assim, o pipeline faz o máximo que você pode fazer no arquivo PDF e, em seguida, você precisa encontrar um visualizador que respeite o espaçamento.

    
por 30.04.2016 / 05:05