Конвертировать PDF в чистый SVG? [закрытый]
Я пытаюсь преобразовать PDF в SVG. Однако тот, который я использую в настоящее время, отображает путь для каждой буквы в каждом фрагменте текста, то есть, если я изменю текст в исходном файле, он будет выглядеть уродливо.
Мне было интересно, какой самый чистый конвертер PDF в SVG, надеюсь, у него нет пути для текстовых областей, которые просто не нужны. Как мы знаем, PDF и SVG довольно похожи, поэтому я предполагаю, что есть некоторые хорошие конвертеры.
9 ответов
Inkscape используется многими людьми в Википедии для преобразования PDF в SVG.
у них даже есть удобный руководство о том, как это делать!
Вы можете использовать Inkscape только в командной строке, не открывая GUI. Попробуйте это:
inkscape \
--without-gui \
--file=input.pdf \
--export-plain-svg=output.svg
для получения полного списка всех параметров командной строки запустите inkscape --help
.
В настоящее время я использую PDFBox, который имеет хорошую поддержку для графического вывода. Есть хорошая поддержка для извлечения векторных штрихов, а также для управления шрифтами. Есть несколько хороших инструментов для его опробования (например, PDFReader будет отображаться как Java Graphics2D). вы можете перехватить графический инструмент с помощью инструмента SVG, такого как Batik (я делаю это, и это дает хороший захват).
нет простого способа конвертировать все PDF в SVG-это зависит от стратегии и инструменты, используемые для создания PDF-файлов. Некоторый текст преобразуется в векторы и не может быть легко восстановлен - вам нужно установить векторные шрифты и посмотреть их.
обновление: Теперь я развил это в пакет PDF2SVG который больше не использует батик:
который был протестирован на ряде PDF-файлов. Он производит выход SVG, состоящий из
- герой
<svg:text>
на символ - пути
<svg:path>
- картинки, как
<svg:image>
более поздние пакеты (надеюсь) преобразуют символы в бегущий текст и пути к графическим объектам более высокого уровня
обновление: Теперь мы можем воссоздать запущенный текст из символов SVG. Мы также преобразовали диаграммы в доменный XML (например, химические спектры). См.https://bitbucket.org/petermr/svg2xml-dev. Он все еще в Альфе, но движется с полезной скоростью. Кто-нибудь можете присоединиться!
обновление. (@Tim Kelty) мы продолжаем работать над PDF2SVG, а также нисходящими инструментами, которые делают (ограниченный) JAVA OCR и создание графических примитивов более высокого уровня (стрелки, коробки и т. д.) См.https://bitbucket.org/petermr/imageanalysis https://bitbucket.org/petermr/diagramanalyzer https://bitbucket.org/petermr/norma и https://bitbucket.org/petermr/ami-core . Это проект захвата 100 миллион фактов из научной литературы (contentmine.org) большая часть из которых PDF.
эта тема довольно старая, но вот удобное решение, которое я нашел:
http://www.cityinthesky.co.uk/opensource/pdf2svg/
Он предлагает инструмент pdf2png, который после установки выполняет именно эту работу в командной строке. До сих пор я тестировал его с безупречными результатами, в том числе с растровыми изображениями.
EDIT: моя ошибка, этот инструмент также преобразует Буквы в пути, поэтому он не решает первоначальный вопрос. Однако это делает хорошую работу в любом случае, и может быть полезен всем, кто не намерен изменять код в svg-файле, поэтому я оставлю сообщение.
вот процесс, который я в конечном итоге использовал. Основным инструментом, который я использовал, был Inkscape, который смог преобразовать текст в порядке.
- используются действия Adobe Acrobat Pro с JavaScript для разделения PDF-листов
- ran Inkscape Portable 0.48.5 из Windows Cmd для конвертации в SVG
- сделал некоторые ручные изменения в определенный атрибут SVG XML у меня были проблемы с помощью Windows Cmd и Windows PowerShell
Отдельные Страницы: Adobe Acrobat Pro с JavaScript
С помощью Adobe Acrobat Pro Actions (ранее пакетная обработка) создайте пользовательское действие для разделения страниц PDF на отдельные файлы. В качестве альтернативы вы можете разделить PDF-файлы с помощью GhostScript
действие Acrobat JavaScript для разделения страниц
/* 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"
});
};
преобразование PDF в SVG: Inkscape с пакетным файлом Windows CMD
С помощью Windows Cmd создан пакетный файл для цикла через все PDF-файлы в папке и конвертировать их к SVG
пакетный файл для преобразования PDF в SVG в текущей папке
:: ===== 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"
атрибуты очистки: Windows Cmd и PowerShell
Я понимаю, что не рекомендуется вручную грубо редактировать SVG или XML-теги или атрибуты из-за потенциальных изменений и вместо этого использовать синтаксический анализатор XML. Однако у меня была простая проблема, когда ширина Штриха на одном рисунке была очень маленькой, а на другом семейство шрифтов было неправильно идентифицировано, поэтому я в основном изменен предыдущий командный скрипт Windows Cmd, чтобы сделать простой поиск и замену. Единственными изменениями были определения строк поиска и изменение для вызова команды PowerShell. Команда PowerShell выполнит поиск, замену и сохранение измененного файла с добавленным суффиксом. Я нашел некоторые другие ссылки, которые можно было бы лучше использовать для анализа или изменения результирующих SVG-файлов, если требуется выполнить какую-то другую незначительную очистку.
изменения для ручного поиска и заменить SVG XML data
:: 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%'"
надеюсь, что это может помочь кому-то
ссылки
действия Adobe Acrobat Pro и ссылки JavaScript на отдельные страницы
- как автоматизировать извлечение страниц из PDF...
- JavaScript для ссылки API Acrobat-extractPages
- извлечение страниц для разделения PDF-файлов (что-то не так с петля?)
- как я могу создать значение Zerofilled с помощью JavaScript?
- как выводить целые числа с ведущими нулями в JavaScript
ссылки GhostScript на отдельные страницы
- справка по GhostScript noob-разрыв многостраничного PDF-файла...
- как конвертировать многостраничный PDF-файл...
- разделение PDF с помощью В Ghostscript
Inkscape ссылки командной строки для преобразования PDF в SVG
ссылки на пакетный файл Windows Cmd
- скрытые возможности пакетных файлов Windows
- SS64.com -индекс командной строки Windows CMD
- почему цикл FOR /f в этом пакетном скрипте, оценивающий пустую строку?
XML tag / attribute replacement research
- как вы можете найти и заменить текст в файле с помощью среды командной строки Windows?
- изменение данных тегов в XML-файле с помощью пакетного файла windows
- обновить XML из командной строки [windows]
- как изменить / создать значения в XML-файлы с помощью PowerShell?
- редактирование атрибутов XML с помощью Powershell
- powershell изменить значение атрибута элемента XML
Если DVI для SVG является опцией, вы также можете использовать dvisvgm для преобразования файла DVI в файл SVG. Это отлично работает, например для формул LaTeX (с опцией --no-fonts
):
dvisvgm --no-fonts input.dvi -o output.svg
появилась pdf2svg который использует poppler и Cairo для преобразования pdf в SVG. Когда я попробовал это, SVG был отлично визуализирован в inkscape
.
bash скрипт для преобразования каждой страницы PDF в свой собственный SVG файл.
#!/bin/bash
#
# Make one PDF per page using PDF toolkit.
# Convert this PDF to SVG using inkscape
#
inputPdf=
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
для генерации в png используйте --export-png
, etc...
Я нашел это xfig
проделал отличную работу:
pstoedit -f fig foo.pdf foo.fig
xfig foo.fig
export to svg
Он сделал гораздо лучшую работу, чем inkscape. На самом деле это, вероятно, pdtoedit сделал это.
вот api REST NodeJS для двух сценариев рендеринга PDF. https://github.com/pumppi/pdf2images
Скрипты: pdf2svg и Imagemagicks конвертировать