Oto proces, którego użyłem. Głównym narzędziem, którego użyłem, był Inkscape, który był w stanie poprawnie konwertować tekst.
- wykorzystał akcje Adobe Acrobat Pro z JavaScriptem, aby podzielić arkusze PDF
- uruchomił Inkscape Portable 0.48.5 z Windows Cmd, aby przekonwertować go do SVG
- dokonałem ręcznych edycji określonego atrybutu XML SVG, z którym miałem problemy, używając Windows Cmd i Windows PowerShell
Oddzielne strony: Adobe Acrobat Pro z JavaScriptem
Korzystając z Adobe Acrobat Pro Actions (dawniej Batch Processing) utwórz niestandardową akcję, aby podzielić strony PDF na osobne pliki. Alternatywnie możesz podzielić pliki PDF za pomocą GhostScript
Akcja Acrobat JavaScript do dzielenia stron
/* 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"
});
};
Konwersja PDF do SVG: Inkscape z plikiem wsadowym Windows CMD
Za pomocą programu Windows Cmd utworzono plik wsadowy, aby przeglądać wszystkie pliki PDF w folderze i konwertować je do formatu SVG
Plik wsadowy do konwersji pliku PDF na SVG w bieżącym folderze
:: ===== 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"
Atrybuty czyszczenia: Windows Cmd i PowerShell
Zdaję sobie sprawę, że nie jest najlepszą praktyką ręczną edycję znaczników lub atrybutów SVG lub XML na siłę ze względu na potencjalne różnice i zamiast tego należy użyć parsera XML. Jednak miałem prosty problem, w którym szerokość obrysu na jednym rysunku była bardzo mała, a na innym rodzina czcionek była nieprawidłowo identyfikowana, więc zasadniczo zmodyfikowałem poprzedni skrypt wsadowy Windows Cmd, aby wykonać proste wyszukiwanie i zamianę. Jedyne zmiany dotyczyły definicji ciągu wyszukiwania i zmiany w celu wywołania polecenia programu PowerShell. Polecenie PowerShell wykona wyszukiwanie i zamienianie oraz zapisuje zmodyfikowany plik z dodanym sufiksem. Znalazłem kilka innych odniesień, które można lepiej wykorzystać do przeanalizowania lub zmodyfikowania wynikowych plików SVG, jeśli konieczne jest wykonanie innego drobnego czyszczenia.
Modyfikacje umożliwiające ręczne wyszukiwanie i zamianę danych 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%'"
Mam nadzieję, że to może komuś pomóc
Bibliografia
Akcje Adobe Acrobat Pro i odwołania JavaScript do oddzielnych stron
GhostScript odwołuje się do oddzielnych stron
Odniesienia do wiersza poleceń Inkscape dotyczące konwersji plików PDF na SVG
Odwołania do skryptów plików wsadowych Windows Cmd
Badanie zastępowania tagów / atrybutów XML