Ось процес, який я закінчив. Основним інструментом, яким я користувався, був 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 (раніше пакетна обробка), створіть власну дію для розділення сторінок PDF на окремі файли. Або ви можете розділити PDF-файли за допомогою GhostScript
Дія Acrobat для розділення сторінок
/* 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 з пакетним файлом CMD Windows
За допомогою 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