Estou tentando converter um PDF para SVG. No entanto, o que estou usando atualmente mapeia um caminho para cada letra em cada pedaço de texto, o que significa que se eu alterar o texto em seu arquivo de origem, ele ficará feio.
Gostaria de saber qual é o conversor de PDF para SVG mais limpo, espero que não tenha um caminho para as áreas de texto que simplesmente não precisam de um. Como sabemos, PDF e SVG são bastante semelhantes, então presumo que haja alguns bons conversores por aí.
Respostas:
O Inkscape é usado por muitas pessoas na Wikipedia para converter PDF em SVG.
http://inkscape.org/
Eles ainda têm um guia prático sobre como fazer isso!
http://en.wikipedia.org/wiki/Wikipedia:Graphic_Lab/Resources/PDF_conversion_to_SVG#Conversion_with_Inkscape
fonte
--export-text-to-path
.Você pode usar o Inkscape apenas na linha de comando, sem abrir uma GUI. Experimente isto:
Para obter uma lista completa de todas as opções de linha de comando, execute
inkscape --help
.fonte
Atualmente, estou usando o PDFBox, que tem um bom suporte para saída gráfica. Há um bom suporte para extrair os traços vetoriais e também para gerenciar fontes. Existem algumas ferramentas boas para experimentá-lo (por exemplo, PDFReader será exibido como Java Graphics2D).
Você pode interceptar a ferramenta gráfica com uma ferramenta SVG como Batik (eu faço isso e dá uma boa captura).Não há uma maneira simples de converter todos os PDFs em SVG - depende da estratégia e das ferramentas usadas para criar os PDFs. Alguns textos são convertidos em vetores e não podem ser facilmente reconstruídos - você precisa instalar fontes vetoriais e procurá-las.
ATUALIZAÇÃO: agora desenvolvi isso em um pacote PDF2SVG que não usa mais Batik:
que foi testado em uma variedade de PDFs. Ele produz saída SVG consistindo em
<svg:text>
por personagem<svg:path>
<svg:image>
Os pacotes posteriores (com sorte) converterão os caracteres em texto corrido e os caminhos em objetos gráficos de nível superiorATUALIZAÇÃO: agora podemos recriar o texto em execução a partir dos caracteres SVG. Também convertemos diagramas em XML de domínio específico (por exemplo, espectros químicos). Consulte https://bitbucket.org/petermr/svg2xml-dev . Ainda está em Alfa, mas está se movendo a uma velocidade útil. Qualquer pessoa pode participar!
ATUALIZAR. (@Tim Kelty) Continuamos trabalhando em PDF2SVG e também em ferramentas downstream que fazem (limitado) Java OCR e criação de primitivas gráficas de nível superior (setas, caixas, etc.). Veja https://bitbucket.org/petermr/ imageanalysis https://bitbucket.org/petermr/diagramanalyzer https://bitbucket.org/petermr/norma e https://bitbucket.org/petermr/ami-core . Este é um projeto financiado para capturar 100 milhões de fatos da literatura científica (contentmine.org), muitos dos quais são PDF.
fonte
Este tópico é bastante antigo, mas aqui está uma solução útil que encontrei:
http://www.cityinthesky.co.uk/opensource/pdf2svg/
Ele oferece uma ferramenta, pdf2png, que uma vez instalada faz exatamente o trabalho na linha de comando. Eu testei com resultados irrepreensíveis até agora, inclusive com bitmaps.
EDIT: Erro meu, esta ferramenta também converte letras em caminhos, por isso não responde à questão inicial. No entanto, ele faz um bom trabalho de qualquer maneira e pode ser útil para qualquer pessoa que não pretenda modificar o código no arquivo svg, então deixarei o post.
fonte
brew install pdf2svg
.Aqui está o processo que acabei usando. A principal ferramenta que usei foi o Inkscape, que era capaz de converter perfeitamente o texto.
Páginas separadas: Adobe Acrobat Pro com JavaScript
Usando o Adobe Acrobat Pro Actions (anteriormente Batch Processing), crie uma ação personalizada para separar as páginas PDF em arquivos separados. Como alternativa, você pode dividir PDFs com GhostScript
Ação Acrobat JavaScript para dividir páginas
Conversão de PDF para SVG: Inkscape com arquivo de lote CMD do Windows
Usando o Windows Cmd, criou um arquivo em lote para percorrer todos os arquivos PDF em uma pasta e convertê-los em SVG
Arquivo em lote para converter PDF em SVG na pasta atual
Atributos de limpeza: Windows Cmd e PowerShell
Sei que não é uma prática recomendada editar manualmente a força bruta de tags ou atributos SVG ou XML devido a variações em potencial e, em vez disso, deveria usar um analisador XML. No entanto, tive um problema simples em que a largura do traço em um desenho era muito pequena e em outro a família de fontes estava sendo identificada incorretamente, então basicamente modifiquei o script de lote anterior do Windows Cmd para fazer um simples localizar e substituir. As únicas alterações foram nas definições de string de pesquisa e na mudança para chamar um comando do PowerShell. O comando PowerShell executará um localizar e substituir e salvar o arquivo modificado com um sufixo adicionado. Eu encontrei algumas outras referências que poderiam ser mais bem usadas para analisar ou modificar os arquivos SVG resultantes se alguma outra limpeza secundária for necessária.
Modificações para localizar e substituir manualmente dados SVG XML
powershell -Command "(Get-Content '%~n1.%_work_x1%') | ForEach-Object {$_ -replace 'stroke-width:0.06', 'stroke-width:1'} | ForEach-Object {$_ -replace 'font-family:Times Roman','font-family:Times New Roman'} | Set-Content '%~n1%_work_s2%.%_work_x2%'"
Espero que isso possa ajudar alguém
Referências
Ações do Adobe Acrobat Pro e referências JavaScript para páginas separadas
Referências do GhostScript para páginas separadas
Referências de linha de comando do Inkscape para conversão de PDF para SVG
Referências do Windows Cmd Batch File Script
Pesquisa de substituição de tag / atributo XML
fonte
Se DVI para SVG for uma opção, você também pode usar dvisvgm para converter um arquivo DVI em um arquivo SVG. Isso funciona perfeitamente, por exemplo, para fórmulas LaTeX (com opção
--no-fonts
):Também existe o pdf2svg que usa o poppler e o Cairo para converter um pdf em SVG. Quando tentei fazer isso, o SVG estava perfeitamente renderizado
inkscape
.fonte
Script Bash para converter cada página de um PDF em seu próprio arquivo SVG.
Para gerar em png, usar
--export-png
, etc ...fonte
Achei que
xfig
fez um excelente trabalho:Ele fez um trabalho muito melhor do que o inkscape. Na verdade, provavelmente foi o pdtoedit que fez isso.
fonte
Aqui está a API REST do NodeJS para dois scripts de renderização de PDF. https://github.com/pumppi/pdf2images
Os scripts são: pdf2svg e Imagemagicks convert
fonte