Вот процесс, который я в итоге использовал. Основным инструментом, который я использовал, был Inkscape, который мог нормально конвертировать текст.
- использовали действия Adobe Acrobat Pro с JavaScript для разделения листов PDF
- запустил 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
:: 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 на отдельные страницы
Ссылки GhostScript на отдельные страницы
Ссылки на командную строку Inkscape для преобразования PDF в SVG
Ссылки на скрипт командного файла Windows Cmd
Исследование замены тегов / атрибутов XML