นี่คือกระบวนการที่ฉันใช้ เครื่องมือหลักที่ฉันใช้คือ 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 (เดิมคือ Batch Processing) สร้างการดำเนินการแบบกำหนดเองเพื่อแยกหน้า PDF เป็นไฟล์แยกกัน หรือคุณอาจแยกไฟล์ PDF ด้วย GhostScript ได้
Acrobat JavaScript Action เพื่อแบ่งหน้า
/* 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 Actions และ JavaScript อ้างอิงไปยังเพจแยก
การอ้างอิง GhostScript ไปยังหน้าแยก
การอ้างอิงบรรทัดคำสั่ง Inkscape สำหรับการแปลง PDF เป็น SVG
การอ้างอิงสคริปต์ Windows Cmd Batch File
แท็ก XML / การวิจัยการแทนที่แอตทริบิวต์