online jpg convertir pdf svg

jpg - Convertir PDF para limpiar SVG?



convertir pdf a vector online (9)

Actualmente estoy usando PDFBox que tiene un buen soporte para salida gráfica. Existe un buen soporte para extraer los trazos vectoriales y también para administrar fuentes. Hay algunas buenas herramientas para probarlo (por ejemplo, PDFReader se mostrará como Java Graphics2D). Puede interceptar la herramienta gráfica con una herramienta SVG como Batik (hago esto y proporciona una buena captura).

No hay una forma simple de convertir todo el PDF a SVG; depende de la estrategia y las herramientas utilizadas para crear los archivos PDF. Algunos textos se convierten en vectores y no se pueden reconstruir fácilmente; debe instalar fuentes vectoriales y buscarlas.

ACTUALIZACIÓN: ahora he desarrollado esto en un paquete PDF2SVG que ya no usa Batik:

que ha sido probado en una gama de archivos PDF. Produce salida SVG que consiste en

  • caracteres como uno <svg:text> por personaje
  • rutas como <svg:path>
  • imágenes como <svg:image>

Los paquetes posteriores (con suerte) convertirán los caracteres a texto en ejecución y las rutas a objetos gráficos de mayor nivel

ACTUALIZACIÓN: ahora podemos volver a crear el texto en ejecución a partir de los caracteres SVG. También hemos convertido diagramas a XML específicos del dominio (por ejemplo, espectros químicos). Ver https://bitbucket.org/petermr/svg2xml-dev . Todavía está en Alpha, pero se está moviendo a una velocidad útil. ¡Cualquiera puede unirse!

ACTUALIZAR. (@Tim Kelty) Continuamos trabajando en PDF2SVG y también en herramientas descendentes que hacen (limitado) Java OCR y la creación de primitivas de gráficos de alto nivel (flechas, casillas, etc.) Consulte https://bitbucket.org/petermr/imageanalysis https://bitbucket.org/petermr/diagramanalyzer https://bitbucket.org/petermr/norma y https://bitbucket.org/petermr/ami-core . Este es un proyecto financiado para capturar 100 millones de datos de la literatura científica (contentmine.org), muchos de los cuales son PDF.

Estoy intentando convertir un PDF a SVG. Sin embargo, el que estoy usando actualmente mapea una ruta para cada letra en cada pedazo de texto, lo que significa que si cambio el texto en su archivo fuente, se ve feo.

Me preguntaba cuál es el convertidor de PDF a SVG más limpio, con suerte uno que no tiene una ruta para sus áreas de texto que simplemente no necesitan una. Como sabemos, PDF y SVG son bastante similares, así que supongo que hay algunos buenos convertidores por ahí.



Descubrí que xfig hizo un excelente trabajo:

pstoedit -f fig foo.pdf foo.fig xfig foo.fig export to svg

Hizo un trabajo mucho mejor que inkscape. En realidad, probablemente fue el pdtoedit el que lo hizo.


Este es el proceso que terminé usando. La herramienta principal que utilicé fue Inkscape, que fue capaz de convertir texto de forma correcta.

  • usó acciones de Adobe Acrobat Pro con JavaScript para dividir las hojas de PDF
  • ejecutó Inkscape Portable 0.48.5 desde Windows Cmd para convertir a SVG
  • Hice algunas ediciones manuales a un atributo SVG XML particular con el que estaba teniendo problemas usando Windows Cmd y Windows PowerShell

Páginas separadas: Adobe Acrobat Pro con JavaScript

Usando Adobe Acrobat Pro Actions (anteriormente Batch Processing) crea una acción personalizada para separar páginas PDF en archivos separados. Alternativamente, puede dividir archivos PDF con GhostScript

Acrobat JavaScript Action para dividir páginas

/* Extract Pages to Folder */ var re = /.*//|/.pdf$/ig; var filename = this.path.replace(re,""); { for ( var i = 0; i < this.numPages; i++ ) this.extractPages ({ nStart: i, nEnd: i, cPath : filename + "_s" + ("000000" + (i+1)).slice (-3) + ".pdf" }); };

Conversión de PDF a SVG: archivo por lotes Inkscape con Windows CMD

Usando Windows Cmd creó un archivo por lotes para recorrer todos los archivos PDF en una carpeta y convertirlos a SVG

Archivo por lotes para convertir PDF a SVG en la carpeta actual

:: ===== SETUP ===== @echo off CLS echo Starting SVG conversion... echo. :: setup working directory (if different) REM set "_work_dir=%~dp0" set "_work_dir=%CD%" :: setup counter set "count=1" :: setup file search and save string set "_work_x1=pdf" set "_work_x2=svg" set "_work_file_str=*.%_work_x1%" :: setup inkscape commands set "_inkscape_path=D:/InkscapePortable/App/Inkscape/" set "_inkscape_cmd=%_inkscape_path%inkscape.exe" :: ===== FIND FILES IN WORKING DIRECTORY ===== :: Output from DIR last element is single carriage return character. :: Carriage return characters are directly removed after percent expansion, :: but not with delayed expansion. pushd "%_work_dir%" FOR /f "tokens=*" %%A IN (''DIR /A:-D /O:N /B %_work_file_str%'') DO ( CALL :subroutine "%%A" ) popd :: ===== CONVERT PDF TO SVG WITH INKSCAPE ===== :subroutine echo. IF NOT [%1]==[] ( echo %count%:%1 set /A count+=1 start "" /D "%_work_dir%" /W "%_inkscape_cmd%" --without-gui --file="%~n1.%_work_x1%" --export-dpi=300 --export-plain-svg="%~n1.%_work_x2%" ) ELSE ( echo End of output ) echo. GOTO :eof :: ===== INKSCAPE REFERENCE ===== :: print inkscape help REM "%_inkscape_cmd%" --help > "%~dp0/inkscape_help.txt" REM "%_inkscape_cmd%" --verb-list > "%~dp0/inkscape_verb_list.txt"

Atributos de limpieza: Windows Cmd y PowerShell

Me doy cuenta de que no es una buena práctica aplicar manualmente fuerza bruta a las etiquetas o atributos SVG o XML debido a posibles variaciones y, en su lugar, debería usar un analizador XML. Sin embargo, tuve un problema simple en el que el ancho de trazo en un dibujo era muy pequeño y en otro la familia de fuentes estaba siendo identificada incorrectamente, así que básicamente modifiqué el script anterior de Windows Cmd para hacer un simple descubrimiento y reemplazo. Los únicos cambios fueron en las definiciones de la cadena de búsqueda y cambiar para llamar a un comando de PowerShell. El comando de PowerShell realizará un buscar y reemplazar y guardará el archivo modificado con un sufijo agregado. Encontré algunas otras referencias que podrían utilizarse mejor para analizar o modificar los archivos SVG resultantes si se necesita realizar alguna otra limpieza menor.

Modificaciones para encontrar y reemplazar manualmente los datos XML SVG

:: setup file search and save string set "_work_x1=svg" set "_work_x2=svg" set "_work_s2=_mod" set "_work_file_str=*.%_work_x1%"

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 esto pueda ayudar a alguien

Referencias

Acciones de Adobe Acrobat Pro y referencias de JavaScript a páginas separadas

Referencias de GhostScript a páginas separadas

Referencia de Inkscape Command Line para conversión de PDF a SVG

Windows Cmd Batch File Secuencias de comandos

Búsqueda de reemplazo de etiqueta / atributo XML


Este tema es bastante antiguo, pero esta es una solución práctica que encontré:

http://www.cityinthesky.co.uk/opensource/pdf2svg/

Ofrece una herramienta, pdf2png, que una vez instalada hace exactamente el trabajo en línea de comandos. Lo he probado con resultados irreprochables hasta ahora, incluso con bitmaps.

EDITAR: Mi error, esta herramienta también convierte letras en rutas, por lo que no aborda la pregunta inicial. Sin embargo, hace un buen trabajo de todos modos, y puede ser útil para cualquier persona que no tenga la intención de modificar el código en el archivo svg, así que dejaré la publicación.



Puede usar Inkscape solo en la línea de comandos, sin abrir una GUI. Prueba esto:

inkscape / --without-gui / --file=input.pdf / --export-plain-svg=output.svg

Para obtener una lista completa de todas las opciones de línea de comandos, ejecute inkscape --help .


Script Bash para convertir cada página de un PDF en su propio archivo SVG.

#!/bin/bash # # Make one PDF per page using PDF toolkit. # Convert this PDF to SVG using inkscape # inputPdf=$1 pageCnt=$(pdftk $inputPdf dump_data | grep NumberOfPages | cut -d " " -f 2) for i in $(seq 1 $pageCnt); do echo "converting page $i..." pdftk ${inputPdf} cat $i output ${inputPdf%%.*}_${i}.pdf inkscape --without-gui "--file=${inputPdf%%.*}_${i}.pdf" "--export-plain-svg=${inputPdf%%.*}_${i}.svg" done

Para generar en png, use --export-png , etc ...


Si DVI a SVG es una opción, también puede usar dvisvgm para convertir un archivo DVI a un archivo SVG. Esto funciona perfectamente, por ejemplo, para las fórmulas LaTeX (con opción --no-fonts ):

dvisvgm --no-fonts input.dvi -o output.svg

También hay pdf2svg que usa poppler y Cairo para convertir un pdf en SVG. Cuando probé esto, el SVG se procesó perfectamente en inkscape .