एसवीजी को साफ करने के लिए पीडीएफ कन्वर्ट करें? [बन्द है]


114

मैं एक पीडीएफ को एसवीजी में बदलने का प्रयास कर रहा हूं। हालाँकि, जो मैं वर्तमान में उपयोग कर रहा हूं वह पाठ के हर टुकड़े में प्रत्येक अक्षर के लिए एक पथ का अर्थ देता है, जिसका अर्थ है कि यदि मैं पाठ को अपनी स्रोत फ़ाइल में बदलता हूं, तो यह बदसूरत दिखता है।

मैं सोच रहा था कि एसवीजी कनवर्टर के लिए सबसे साफ पीडीएफ क्या है, उम्मीद है कि यह पाठ क्षेत्रों के लिए एक रास्ता नहीं है जो बस एक की आवश्यकता नहीं है। जैसा कि हम जानते हैं, पीडीएफ और एसवीजी काफी समान हैं, इसलिए मुझे लगता है कि वहां कुछ अच्छे कन्वर्टर्स हैं।


11
'जैसा कि हम जानते हैं, पीडीएफ और एसवीजी काफी समान हैं ...' ?!?!? उस स्थिति में, आप जितना जानते हैं, उससे कहीं अधिक ...
कर्ट फ़िफ़ेल

22
वे इस अर्थ में समान हैं कि वे दोनों वेक्टर-आधारित प्रारूप हैं। बस यहीं से तुलना समाप्त होती है।
फ्रैंक रेम

1
मुझे लगता है कि वे दोनों पाठ की पूर्ण स्थिति का उपयोग करते हैं।
ब्रायन फील्ड

क्या कोई भी इंटरैक्टिव (फॉर्म-फील्ड) पीडीएफ के साथ ऐसा कर रहा है ताकि वे ब्राउज़र में इंटरैक्टिव रहें, प्रस्तुत किए गए एसवीजी पर सुपरपोज़िंग INPUTs, शायद?
टिम

जवाबों:


84

पीडीएफ को एसवीजी में बदलने के लिए विकिपीडिया पर कई लोगों द्वारा इंकस्केप का उपयोग किया जाता है।

http://inkscape.org/

वे भी कैसे करना है पर एक आसान गाइड है!

http://en.wikipedia.org/wiki/Wikipedia:Graphic_Lab/Resources/PDF_conversion_to_SVG#Conversion_with_Inkscape


4
Inkscape बहुत अच्छी तरह से काम नहीं करता है, क्योंकि यह पाठ को पथों में बदलता है, भी। मुझे यह भी पता चलता है कि वे अक्सर फ़ॉन्ट डेटा खो देते हैं, लेकिन एक अच्छे, स्थापित फ़ॉन्ट को अनुमानित नहीं करते हैं। अगर एसवीजी नहीं कर सकता है तो पीडीएफ इसे कैसे प्रदर्शित करता है?
21

यह एक उचित सवाल है, मैं दोनों प्रारूपों के साथ पारिवारिक हूं, लेकिन मैंने इस विषय में शोध नहीं किया है। मेरी नजर इस पर पड़ सकती है। यह लगता है कि यह दो प्रारूपों के निर्माण के तरीके को उबाल सकता है। उदाहरण के लिए SVG XML के साथ बनाया गया है, जबकि PDF इसका स्वयं का XML प्रकार प्रारूप उपयोग करता है।
सेंट शेल्डन पटनेट

3
खैर, मैं चाहता हूं कि इसका कारण यह है कि मैं PHP का उपयोग करके पाठ को संपादित करने में सक्षम होना चाहता हूं। मैं इसे सीधे पीडीएफ के साथ कर सकता था, लेकिन पीडीएफ को HTML में आसानी से इनलेट नहीं किया जा सकता, लेकिन एसवीजी कर सकते हैं। मैं बस पीडीएफ के साथ रह सकता हूं और इसे मूल्यों को संपादित करने के बाद PHP में JPG में परिवर्तित कर सकता हूं ..
DanRedux

8
@DanRedux: AFAIK, आप 'फॉन्ट टेक्स्ट्स टू पाथ्स ' को ' इनस्केप ' में रूपांतरित कर सकते हैं । Inkscape कमांडलाइन पर आप इस रूपांतरण को जोड़कर सक्षम कर सकते हैं --export-text-to-path
कर्ट फ़िफ़ेल

1
यह स्पष्ट हो सकता है लेकिन इलस्ट्रेटर पीडीएफ को एसवीजी में बदल सकता है। यहाँ आया, Inkscape डाउनलोड किया तो मुझे लगा कि मेरे पास इलस्ट्रेटर है। en.wikipedia.org/wiki/Wikipedia:Graphics_Lab/Resources/…
E. Sundin

83

आप GUI खोले बिना केवल कमांडलाइन पर Inkscape का उपयोग कर सकते हैं। इसे इस्तेमाल करे:

inkscape \
  --without-gui \
  --file=input.pdf \
  --export-plain-svg=output.svg 

सभी कमांडलाइन विकल्पों की पूरी सूची के लिए, रन करें inkscape --help


यह मेरे लिए पाठ में स्थान हटाता है।
23

1
@MaxNoe: यह काफी संभव है - लेकिन फिर यह एक "संपत्ति" है कि कैसे उस विशेष पीडीएफ का निर्माण किया जाता है, आंतरिक रूप से। पीडीएफ से "टेक्स्ट" को पहचानने और निकालने के लिए कठिनाइयों के कुछ स्पष्टीकरणों के लिए , GitHub पर मेरे हाथ से कोडित पीडीएफ फाइलों (एम्बेडेड टिप्पणियों के साथ) देखें(उन्हें अपनी पसंद के एक टेक्स्ट एडिटर के साथ-साथ एक पीडीएफ दर्शक और फ़ाइलों से copy'n'paste टेक्स्ट खोलें।)
Kurt Pfeifle

हाँ, मुझे लगता है कि यह करना है जिस तरह से टेक्स को व्हाट्सएप प्रदान कर रहा है, जैसे कि बक्से।
मैक्सएन

23

मैं वर्तमान में पीडीएफबॉक्स का उपयोग कर रहा हूं जिसमें ग्राफिक आउटपुट के लिए अच्छा समर्थन है। वेक्टर स्ट्रोक निकालने और फोंट के प्रबंधन के लिए अच्छा समर्थन है। इसे आज़माने के लिए कुछ अच्छे उपकरण हैं (जैसे PDFReader जावा ग्राफिक्स 2 डी के रूप में प्रदर्शित होगा)। आप ग्राफिक्स टूल को एसवीजी टूल जैसे बाटिक (मैं ऐसा करता हूं और यह अच्छा कैप्चर देता है) के साथ इंटरसेप्ट कर सकता है।

सभी पीडीएफ को एसवीजी में बदलने का कोई सरल तरीका नहीं है - यह पीडीएफ बनाने के लिए इस्तेमाल की जाने वाली रणनीति और उपकरणों पर निर्भर करता है। कुछ पाठ वैक्टर में परिवर्तित हो जाते हैं और उन्हें आसानी से समेटा नहीं जा सकता - आपको वेक्टर फोंट स्थापित करना होगा और उन्हें देखना होगा।

अद्यतन: मैंने अब इसे एक में विकसित किया है पैकेज PDF2SVG जो बाटिक का उपयोग नहीं करता है:

जिसे PDF की एक श्रेणी पर परीक्षण किया गया है। यह एसवीजी उत्पादन से मिलकर बनता है

  • एक के रूप में वर्ण <svg:text> वर्ण के अनुसार वर्ण
  • के रूप में पथ <svg:path>
  • छवियों के रूप में <svg:image>

बाद में संकुल पाठ (अक्षर) को चल रहे पाठ और पथ को उच्च-स्तरीय ग्राफिक्स ऑब्जेक्ट में बदल देगा

अद्यतन: हम अब एसवीजी अक्षरों से चल रहे पाठ को फिर से बना सकते हैं। हमने आरेखों को डोमेन-विशिष्ट XML (जैसे रासायनिक स्पेक्ट्रा) में भी बदल दिया है। Https://bitbucket.org/petermr/svg2xml-dev देखें । यह अभी भी अल्फा में है, लेकिन एक उपयोगी गति से आगे बढ़ रहा है। कोई भी इसमें शामिल हो सकता है!

अपडेट करें। (@ कलीम केल्टी) हम पीडीएफ 2 एसवीजी पर काम करना जारी रख रहे हैं और डाउनस्ट्रीम टूल भी करते हैं (सीमित) जावा ओसीआर और उच्च-स्तरीय ग्राफिक्स आदिम (तीर, बॉक्स आदि) का निर्माण। https://bitbucket.org/petrr/ देखें कल्पनाशीलता https://bitbucket.org/petermr/diagramanalyzer https://bitbucket.org/petermr/norma और https://bitbucket.org/petermr/ami-core । यह वैज्ञानिक साहित्य (contentmine.org) से 100 मिलियन तथ्यों को पकड़ने के लिए एक वित्त पोषित परियोजना है, जिसमें से अधिकांश पीडीएफ है।


19

यह विषय काफी पुराना है, लेकिन यहाँ एक उपयोगी समाधान है जो मुझे मिला:

http://www.cityinthesky.co.uk/opensource/pdf2svg/

यह एक उपकरण प्रदान करता है, pdf2png, जो एक बार स्थापित होने पर कमांड लाइन में ठीक काम करता है। मैंने इसे अभी तक अपूरणीय परिणाम के साथ परीक्षण किया है, जिसमें बिटमैप भी शामिल हैं।

संपादित करें: मेरी गलती, यह टूल अक्षरों को पथों में भी परिवर्तित करता है, इसलिए यह प्रारंभिक प्रश्न को संबोधित नहीं करता है। हालांकि यह वैसे भी एक अच्छा काम करता है, और जो कोई भी svg फ़ाइल में कोड को संशोधित करने का इरादा नहीं रखता है, उसके लिए उपयोगी हो सकता है, इसलिए मैं पोस्ट छोड़ दूंगा।


उबंटू पर आप इसे स्थापित कर सकते हैं: $ sudo apt-get install pdf2svg
tvw

2
यद्यपि यह अक्षरों को पथों में परिवर्तित करता है, लेकिन परिणाम बहुत अच्छे हैं। कुछ संशोधन करने के लिए, मैं एसवीजी को सीधे एक संपादक के साथ संपादित करता था। यदि आप उन्हें एक ऑनस्क्रीन एसवीजी के रूप में इंकस्केप के साथ खोलते और सहेजते हैं, तो कोड बेहतर दिखता है और आपके पास ऑब्जेक्ट आईडी हैं, आसानी से संस्थाओं को खोजने के लिए, आप बदलना चाहते हैं।
टीवीवी

1
आप इसे मैक पर स्थापित कर सकते हैं brew install pdf2svg
कोलास

10

यहां वह प्रक्रिया है जिसका मैंने उपयोग करके समाप्त किया। मेरे द्वारा उपयोग किया जाने वाला मुख्य उपकरण इंकस्केप था जो पाठ को ठीक से परिवर्तित करने में सक्षम था।

  • पीडीएफ शीट को विभाजित करने के लिए जावास्क्रिप्ट के साथ एडोब एक्रोबैट प्रो क्रियाओं का उपयोग किया
  • SVG में परिवर्तित करने के लिए Windows Cmd से Inkscape पोर्टेबल 0.48.5 भाग गया
  • कुछ विशेष एसवीजी एक्सएमएल विशेषता के लिए कुछ मैनुअल संपादन मैंने किया था जिसमें विंडोज सीएमडी और विंडोज पॉवरशेल का उपयोग करके समस्या थी

अलग पेज: जावास्क्रिप्ट के साथ एडोब एक्रोबैट प्रो

Adobe Acrobat Pro Actions (पूर्व में बैच प्रोसेसिंग) का उपयोग करके PDF पेजों को अलग-अलग फाइलों में अलग करने के लिए एक कस्टम एक्शन बनाया जाता है। वैकल्पिक रूप से आप घोस्टस्क्रिप्ट के साथ पीडीएफ को विभाजित करने में सक्षम हो सकते हैं

पृष्ठों को विभाजित करने के लिए एक्रोबेट जावास्क्रिप्ट एक्शन

/* 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"
    });
};

एसवीजी रूपांतरण के लिए पीडीएफ: विंडोज सीएमडी बैच फ़ाइल के साथ इंकस्केप

विंडोज सीएमडी का उपयोग करके एक फ़ोल्डर में सभी पीडीएफ फाइलों के माध्यम से लूप में बैच फ़ाइल बनाई गई और उन्हें एसवीजी में परिवर्तित करें

वर्तमान फ़ोल्डर में पीडीएफ को एसवीजी में बदलने के लिए बैच फ़ाइल

:: ===== 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"

क्लीनअप विशेषताएँ: विंडोज सीएमडी और पॉवरशेल

मुझे एहसास है कि एसवीजी या एक्सएमएल टैग या संभावित रूपांतरों के कारण विशेषताओं को संपादित करने के लिए मैन्युअल रूप से क्रूर बल को संपादित करना सबसे अच्छा अभ्यास नहीं है और इसके बजाय एक्सएमएल पार्सर का उपयोग करना चाहिए। हालाँकि मेरे पास एक साधारण मुद्दा था जहां एक ड्राइंग पर स्ट्रोक की चौड़ाई बहुत छोटी थी, और दूसरे पर फ़ॉन्ट परिवार को गलत तरीके से पहचाना जा रहा था, इसलिए मैंने मूल रूप से एक सरल खोज करने और बदलने के लिए पिछले विंडोज सीएमडी बैच स्क्रिप्ट को संशोधित किया। केवल परिवर्तन खोज स्ट्रिंग परिभाषा में थे और PowerShell कमांड को कॉल करने के लिए बदल रहे थे। पॉवरशेल कमांड एक खोज और बदलेगा और एक संशोधित प्रत्यय के साथ संशोधित फाइल को बचाएगा। मुझे कुछ अन्य संदर्भ मिले जिनका बेहतर परिणाम देने के लिए इस्तेमाल किया जा सकता था या परिणामी एसवीजी फाइलों को संशोधित किया जा सकता था अगर कुछ अन्य मामूली सफाई की आवश्यकता होती है।

एसवीजी एक्सएमएल डेटा को मैन्युअल रूप से खोजने और बदलने के लिए संशोधन

:: 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 का संदर्भ अलग पेजों से है

एसवीजी रूपांतरण के लिए पीडीएफ के लिए इंकस्केप कमांड लाइन संदर्भ

Windows Cmd बैच फ़ाइल स्क्रिप्ट संदर्भ

XML टैग / विशेषता प्रतिस्थापन अनुसंधान


7

यदि DVI से SVG एक विकल्प है, तो आप DVI फ़ाइल को SVG फ़ाइल में बदलने के लिए DVisvgm का भी उपयोग कर सकते हैं । यह पूरी तरह से LaTeX सूत्र के लिए काम करता है (विकल्प के साथ --no-fonts):

dvisvgm --no-fonts input.dvi -o output.svg

Pdf2svg भी है जो एक pdf को SVG में बदलने के लिए poppler और Cairo का उपयोग करता है। जब मैंने यह कोशिश की, एसवीजी को पूरी तरह से प्रस्तुत किया गया inkscape


1
मेरे पास एक पीडीएफ है जो स्कैक पैकेज (शतरंज के टुकड़े) से कुछ एलईटीएक्स प्रतीकों को प्रस्तुत करता है। यह विशेष रूप से फाइल Inkscape में अच्छी तरह से संभाला नहीं है, क्योंकि प्रतीक एरियल अक्षर बन गए हैं ... मुझे pdf2svg के साथ सही परिणाम मिले हैं।
LRMAAX

विंडोज सिस्टम के लिए यहां संकलित बाइनरी टूल का एक सेट है: विंडोज के लिए पॉप्लर
पाओलो गिबेलिनी

7

एक पीडीएफ के प्रत्येक पृष्ठ को अपनी स्वयं की एसवीजी फ़ाइल में बदलने के लिए स्क्रिप्ट को बैश करें।

#!/bin/bash
#
#  Make one PDF per page using PDF toolkit.
#  Convert this PDF to SVG using inkscape
#

inputPdf=$1

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

पींग में उत्पन्न करने के लिए, उपयोग --export-png, आदि ...


1

मैंने पाया कि xfigएक उत्कृष्ट काम किया है:

pstoedit -f fig foo.pdf foo.fig
xfig foo.fig

export to svg

इसने अक्सस्केप की तुलना में बहुत बेहतर काम किया। वास्तव में यह शायद pdtoedit था कि यह किया था।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.