Achatando a transparência do PDF

11

Eu tenho um PDF, feito com o Inkscape, que usa cores transparentes. Esta imagem deve ser usada em um documento LaTeX.

Embora preservar a transparência seja agradável para a edição, pode ser um problema para a impressão. A impressão geralmente envolve a conversão de PDF para PS. Como o Postscript não suporta transparência, isso requer tanto

  • planificação, ou seja, criando um gráfico vetorial que funcione sem transparência

ou

  • rasterização, ou seja, renderizando uma imagem de bitmap.

Quando um documento PDF que contém essa figura é impresso (ou convertido em PS) usando o Evince (ou Cairo ou Ghostscript), a página inteira é renderizada como um bitmap, tornando as fontes feias (diferentes das outras páginas). (O Adobe Acrobat lida bem com esses PDFs.)

Infelizmente, converter as figuras PDF em EPS (antes de incluí-las no LaTeX) não ajuda muito, porque os pdftops e pdf2ps (novamente Cairo ou Ghostscript) rasterizam a imagem, ou seja, renderizam um bitmap (salvo como EPS). (Isso é um pouco melhor, porque não afeta a página inteira, mas eu ainda prefiro gráficos vetoriais.)

Como posso nivelar a transparência com o Inkscape ou outro software no Linux?

Jan
fonte
2
Pergunta interessante. Seria muito complexo achatar svg, pois todas as interseções possíveis de formas precisariam criar uma nova forma opaca com preenchimento composto.
Artfulrobot
@artfulrobot Exatamente. Os gráficos vetoriais resultantes podem, em geral, tornar-se bastante complexos. No entanto, para vários gráficos tipicamente vetoriais de arte em linha, o resultado ainda deve funcionar bem em uma impressora PostScript moderna.
Jan
O melhor método que encontrei é um manual tedioso, que envolve redesenho após uma etapa inicial: use o inkscape para converter seu pdf em um svg, abra o svg em um bom editor de texto. Substitua todas as ocorrências de 'opacidade: [0] [0-9 \.]' Por 'opacidade: 1' (versão regex) ou localize 'opacidade: 0'. e substitua manualmente pela opacidade 1 (versão tediosa). Abra o svg no inkscape e faça com que pareça agradável novamente (a parte mais difícil), depois retorne ao pdf e ao eps.
Chris H

Respostas:

6

Uma maneira de contornar a rasterização ruim é converter manualmente o documento PDF em postscript, porque quando você chama o CUPS por meio do evince ou qualquer outra interface, ele será convertido de qualquer maneira.

Você pode tentar pdftops -r 1200 document.pdfaumentar a resolução do padrão baixo de 300 e, em seguida, imprimir o postscript resultante. No entanto, com as impressoras em funcionamento, isso não produziu uma melhoria significativa. O texto comum em páginas com e sem imagens transparentes ainda parecia diferente - embaçado versus claro.

Então, acabei usando o Acrobat Professional (em uma máquina Windows) para nivelar as imagens transparentes usadas no meu documento de látex, o que dava ótimos resultados. Verifique se Transparency Flattener Presetestá na [High Resolution]configuração avançada de impressão. Meu colega mencionou que talvez alguém pudesse enviar um arquivo PDF por FTP diretamente para uma impressora de rede a jato de laser moderna, ignorando a conversão de postscript. Eu não tentei isso.

Seria ótimo ter uma solução somente para Linux para esse problema.

Fred Schoen
fonte
1

Eu tive o mesmo problema e esta é a minha solução (para referência futura):

Tentei muitas coisas e até agora a melhor solução de trabalho que encontrei na internet foi renderizar o PDF completamente como uma imagem pdf2pse ps2pdf13, mas o resultado não foi satisfatório para mim, porque todas as formas vetoriais foram perdidas. Eu queria renderizar apenas as partes críticas, mas manter os gráficos vetoriais.

O que fez o truque para mim foi isolar todas as partes críticas no inkscape e colocá-las em uma camada separada (nas minhas imagens, essas eram todas as sombras). Tornei apenas essa camada (e a camada de fundo) visível e a exportei para PNG, renderizando efetivamente todos os efeitos de transparência, mas apenas eles. Eu o importei de volta e o usei em uma nova camada. Após inverter todas as visibilidades da camada (camada de transparência: desativada, todas as outras: ativada), o PDF exportado funcionou perfeitamente com o LaTeX e era imprimível sem renderizar a página inteira como imagem.

TL; DR:

  1. Isole todas as transparências problemáticas em uma camada (máscaras de transparência, sombras etc.)
  2. Tornar visível apenas a camada e o fundo problemáticos
  3. Exportar para PNG
  4. Importe o PNG recém-criado e use como plano de fundo
  5. Tornar todas as camadas visíveis, exceto a camada problemática
  6. Exportar para PDF
  7. Sorrir :)
Edgar
fonte
0

Uma maneira é criar uma caixa branca no Inkscape do mesmo tamanho da sua página e enviá-la para a camada inferior. Isso exportará sua imagem com um fundo branco em vez de transparente.

brousch
fonte
1
O problema não é um plano de fundo transparente e a adição de um plano de fundo branco não o resolve. A questão da imagem usa formas semitransparentes sobre outras formas (opacas). SVG e PDF suportam isso, mas o PS não.
Jan
0

Abri o arquivo pdf usando o Ubuntu / Gimp e imprimi uma página de cada vez, verificando a visualização da impressão a cada vez.

Convidado
fonte
-1
pdftops -origpagesizes input.pdf output.ps

então

ps2pdf -r600x600 output.ps input-new.pdf
HinzundKunz
fonte