Estoy intentando convertir un PDF a SVG. Sin embargo, el que estoy usando actualmente asigna una ruta para cada letra en cada fragmento de texto, lo que significa que si cambio el texto en su archivo de origen, se ve feo.
Me preguntaba cuál es el convertidor de PDF a SVG más limpio, con suerte uno que no tenga una ruta para sus áreas de texto que simplemente no la necesitan. Como sabemos, PDF y SVG son bastante similares, así que supongo que hay algunos buenos convertidores por ahí.
Respuestas:
Muchas personas utilizan Inkscape en Wikipedia para convertir PDF a SVG.
http://inkscape.org/
¡Incluso tienen una guía práctica sobre cómo hacerlo!
http://en.wikipedia.org/wiki/Wikipedia:Graphic_Lab/Resources/PDF_conversion_to_SVG#Conversion_with_Inkscape
fuente
--export-text-to-path
.Puede usar Inkscape solo en la línea de comandos, sin abrir una GUI. Prueba esto:
Para obtener una lista completa de todas las opciones de la línea de comandos, ejecute
inkscape --help
.fuente
Actualmente estoy usando PDFBox, que tiene un buen soporte para la salida gráfica. Hay 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).
Puedes interceptar la herramienta gráfica con una herramienta SVG como Batik (hago esto y da una buena captura).No existe una forma sencilla de convertir todos los PDF a SVG; depende de la estrategia y las herramientas utilizadas para crear los PDF. Parte del texto se convierte en vectores y no se puede 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 variedad de archivos PDF. Produce una salida SVG que consta de
<svg:text>
por personaje<svg:path>
<svg:image>
Los paquetes posteriores convertirán (con suerte) los caracteres en texto en ejecución y las rutas en objetos gráficos de nivel superiorACTUALIZACIÓN: Ahora podemos volver a crear el texto en ejecución a partir de los caracteres SVG. También hemos convertido diagramas a XML de dominio específico (por ejemplo, espectros químicos). Consulte https://bitbucket.org/petermr/svg2xml-dev . Todavía está en Alfa, pero se mueve a una velocidad útil. ¡Cualquiera puede unirse!
ACTUALIZAR. (@Tim Kelty) Seguimos trabajando en PDF2SVG y también en herramientas posteriores que hacen (limitado) Java OCR y la creación de primitivas gráficas de nivel superior (flechas, cuadros, 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.
fuente
Este tema es bastante antiguo, pero aquí hay una solución útil que encontré:
http://www.cityinthesky.co.uk/opensource/pdf2svg/
Ofrece una herramienta, pdf2png, que una vez instalada hace exactamente el trabajo en la línea de comandos. Lo he probado con resultados irreprochables hasta ahora, incluso con mapas de bits.
EDITAR: Mi error, esta herramienta también convierte letras en caminos, por lo que no aborda la pregunta inicial. Sin embargo, hace un buen trabajo de todos modos y puede ser útil para cualquiera que no tenga la intención de modificar el código en el archivo svg, así que dejaré la publicación.
fuente
brew install pdf2svg
.Este es el proceso que terminé usando. La herramienta principal que utilicé fue Inkscape, que pudo convertir texto correctamente.
Páginas separadas: Adobe Acrobat Pro con JavaScript
El uso de Acciones de Adobe Acrobat Pro (anteriormente Procesamiento por lotes) crea una acción personalizada para separar páginas PDF en archivos separados. Alternativamente, puede dividir archivos PDF con GhostScript
Acción de JavaScript de Acrobat para dividir páginas
Conversión de PDF a SVG: Inkscape con archivo por lotes CMD de Windows
El uso de 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
Atributos de limpieza: Windows Cmd y PowerShell
Me doy cuenta de que no es una buena práctica editar manualmente por fuerza bruta etiquetas o atributos SVG o XML debido a posibles variaciones y debería usar un analizador XML en su lugar. Sin embargo, tuve un problema simple en el que el ancho del trazo en un dibujo era muy pequeño y en otro la familia de fuentes se identificaba incorrectamente, por lo que básicamente modifiqué el script por lotes de Windows Cmd anterior para hacer una búsqueda y reemplazo simple. 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á una búsqueda, reemplazará y guardará el archivo modificado con un sufijo agregado. Encontré algunas otras referencias que podrían usarse mejor para analizar o modificar los archivos SVG resultantes si se necesita realizar alguna otra limpieza menor.
Modificaciones para buscar y reemplazar manualmente datos XML SVG
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
Referencias de la línea de comandos de Inkscape para la conversión de PDF a SVG
Referencias de secuencias de comandos de archivos por lotes de Windows Cmd
Investigación de reemplazo de atributos / etiquetas XML
fuente
Si DVI a SVG es una opción, también puede usar dvisvgm para convertir un archivo DVI en un archivo SVG. Esto funciona perfectamente, por ejemplo, para fórmulas LaTeX (con opción
--no-fonts
):También hay pdf2svg que usa poppler y Cairo para convertir un pdf en SVG. Cuando probé esto, el SVG estaba perfectamente renderizado en formato
inkscape
.fuente
Script Bash para convertir cada página de un PDF en su propio archivo SVG.
Para generar en png, usar
--export-png
, etc ...fuente
Descubrí que
xfig
hizo un excelente trabajo:Hizo un trabajo mucho mejor que inkscape. En realidad, probablemente fue pdtoedit quien lo hizo.
fuente
Aquí está la API REST de NodeJS para dos scripts de renderizado PDF. https://github.com/pumppi/pdf2images
Los scripts son: pdf2svg e Imagemagicks convert
fuente