pdf - पीडीएफ को svg में कनवर्ट करें




batik pdfbox (2)

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

एक पीडीएफ को एक एसवीजी में बदलने के लिए इंकस्केप के कमांड लाइन इंटरफेस का उपयोग करने के लिए, इसका उपयोग करें:

inkscape -l out.svg in.pdf

जिसे आप शायद कॉल कर सकते हैं:

Runtime.getRuntime().exec("inkscape -l out.svg in.pdf")

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29

मुझे लगता है कि exec () तुल्यकालिक है और प्रक्रिया पूर्ण होने के बाद ही लौटाता है (हालांकि मैं उस पर 100% निश्चित नहीं हूं), इसलिए आप उसके बाद "out.svg" पढ़ने में सक्षम हो सकते हैं। किसी भी मामले में, "जावा सिस्टम कॉल" गूगलिंग से उस हिस्से को सही तरीके से कैसे किया जाए, इस बारे में अधिक जानकारी मिलेगी।

मैं पीडीएफ को एसवीजी में परिवर्तित करना चाहता हूं कृपया कुछ पुस्तकालयों / निष्पादन योग्य सुझाव दें जो इसे कुशलतापूर्वक करने में सक्षम होंगे। मैंने अपाचे पीडीएफबॉक्स और बटिक पुस्तकालयों का उपयोग करके अपना स्वयं का जावा प्रोग्राम लिखा है -

PDDocument document = PDDocument.load( pdfFile );
DOMImplementation domImpl =
    GenericDOMImplementation.getDOMImplementation();

// Create an instance of org.w3c.dom.Document.
String svgNS = "http://www.w3.org/2000/svg";
Document svgDocument = domImpl.createDocument(svgNS, "svg", null);
SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(svgDocument);
ctx.setEmbeddedFontsOn(true);

// Ask the test to render into the SVG Graphics2D implementation.

    for(int i = 0 ; i < document.getNumberOfPages() ; i++){
        String svgFName = svgDir+"page"+i+".svg";
        (new File(svgFName)).createNewFile();
        // Create an instance of the SVG Generator.
        SVGGraphics2D svgGenerator = new SVGGraphics2D(ctx,false);
        Printable page  = document.getPrintable(i);
        page.print(svgGenerator, document.getPageFormat(i), i);
        svgGenerator.stream(svgFName);
    }

यह समाधान बहुत अच्छा काम करता है लेकिन परिणामस्वरूप svg फ़ाइलों का आकार विशाल है। (पीडीएफ से कई गुना अधिक)। मैंने यह पता लगाया है कि पाठ संपादक में svg को देखकर समस्या कहां है। यह मूल दस्तावेज़ में प्रत्येक चरित्र को अपने ब्लॉक में संलग्न करता है भले ही वर्णों के फ़ॉन्ट गुण समान हों। उदाहरण के लिए हैलो शब्द 6 अलग-अलग टेक्स्ट ब्लॉक के रूप में दिखाई देगा। क्या उपरोक्त कोड को ठीक करने का कोई तरीका है? या कृपया एक और समाधान सुझाएं जो अधिक कुशलतापूर्वक काम करेगा।


pdf2svg 2 pdf2svg पर एक नज़र pdf2svg :

काम में लाना

pdf2svg <input.pdf> <output.svg> [<pdf page no. or "all" >]

all का उपयोग करते समय फ़ाइल नाम को %d साथ दें (जिसे पृष्ठ संख्या द्वारा प्रतिस्थापित किया जाएगा)।

pdf2svg input.pdf output_page%d.svg all

और कुछ समस्या निवारण के लिए देखें: http://www.calcmaster.net/personal_projects/pdf2svg/





pdfbox