Δημιουργήστε έναν online μετατροπέα εγγράφων με το ONLYOFFICE Conversion API

14 Αυγούστου 2025Από τον Efstathios Iosifidis

Η μετατροπή εγγράφων είναι μια πολύ δημοφιλής και πολύτιμη λειτουργία που μας βοηθά να εργαζόμαστε με πολλούς τύπους εγγράφων. Οι επεξεργαστές του ONLYOFFICE μπορούν εύκολα να μετατρέψουν έγγραφα σε μια μεγάλη γκάμα μορφών. Αυτή η ανάρτηση θα σας δείξει πώς να δημιουργήσετε έναν online μετατροπέα που λειτουργεί με το ONLYOFFICE Conversion API.


Build an online converter with ONLYOFFICE Conversion API

Σχετικά με το ONLYOFFICE Conversion API

Η υπηρεσία μετατροπής εγγράφων επιτρέπει τη μετατροπή όλων των τύπων εγγράφων Office: κείμενα, φύλλα εργασίας, παρουσιάσεις, φόρμες, PDF και ηλεκτρονικά βιβλία. Διευκολύνει τη δημιουργία PDF από έγγραφα και φύλλα εργασίας, τη μετατροπή σχολικών βιβλίων σε ηλεκτρονικά βιβλία, παρουσιάσεων σε αρχεία εικόνας και πολλά άλλα. Το ONLYOFFICE υποστηρίζει περισσότερες από 50 διαφορετικές μορφές εγγράφων.

Πώς λειτουργεί

Το API μετατροπής μας λειτουργεί μέσω της υπηρεσίας μετατροπής εγγράφων. Λειτουργεί ως μέρος του ONLYOFFICE Document Server και μας επιτρέπει να μετατρέπουμε διάφορα αρχεία εγγράφων στις κατάλληλες μορφές.

Η μετατροπή πραγματοποιείται σε διάφορα βήματα:

  1. Ο χρήστης επιλέγει ένα αρχείο που θα ανεβαστεί στον διαχειριστή εγγράφων.
  2. Ο διαχειριστής εγγράφων ανεβάζει το επιλεγμένο αρχείο στην υπηρεσία αποθήκευσης εγγράφων.
  3. Η υπηρεσία αποθήκευσης εγγράφων στέλνει το ανεβασμένο αρχείο στην υπηρεσία μετατροπής εγγράφων χρησιμοποιώντας το API μετατροπής.
  4. Η υπηρεσία μετατροπής εγγράφων μετατρέπει το επιλεγμένο αρχείο στην επιθυμητή μορφή.
  5. Η υπηρεσία αποθήκευσης εγγράφων κατεβάζει το μετατρεπόμενο αρχείο.

Build an online converter with ONLYOFFICE Conversion API

Ο διαχειριστής εγγράφων και οι υπηρεσίες αποθήκευσης εγγράφων είναι εργαλεία από την πλευρά του πελάτη και του διακομιστή που διευκολύνουν την επιλογή και την αποθήκευση ενός εγγράφου για περαιτέρω μετατροπή. Ωστόσο, η εφαρμογή μας θα αναλάβει αυτές τις εργασίες, καθώς δημιουργούμε έναν προσαρμοσμένο μετατροπέα.

Προαπαιτούμενα

Ο μετατροπέας μας θα βασίζεται στο NodeJS. Για αυτό το έργο, θα χρειαστούμε τα εξής:

  • Express
  • Axios
  • Jsonwebtoken

Θα χρησιμοποιήσουμε το πακέτο Axios για να στείλουμε ένα αίτημα POST στον ONLYOFFICE Document Server και το πακέτο Jsonwebtoken για να υπογράψουμε ένα JWT token. Από την έκδοση 7.2, η πιστοποίηση JWT είναι ενεργοποιημένη από προεπιλογή.

Εναλλακτικά, υπάρχει η επιλογή να εκτελέσετε την εικόνα του ONLYOFFICE Document Server με απενεργοποιημένη την πιστοποίηση JWT. Για να το κάνετε αυτό, εκτελέστε την ακόλουθη εντολή στο terminal:

sudo docker run -i -t -d -p 80:80 -e JWT_ENABLED=false onlyoffice/documentserver

Το αίτημα POST που στέλνει ο μετατροπέας μας στον ONLYOFFICE Document Server είναι το ακόλουθο:

{
        "async": true,
        "filetype": fileType,
        "key": key, 
        "outputtype": outputType,
        "title": `Converted Document.${outputType}`,
        "url": link       
    }
  • Στην παράμετρο accept, ορίζουμε ότι θέλουμε να λάβουμε μια απάντηση σε μορφή JSON.
  • Η παράμετρος async δείχνει ότι το αίτημα είναι ασύγχρονο.
  • Η παράμετρος fileType καθορίζει τον τύπο του αρχικού αρχείου που πρόκειται να μετατραπεί.
  • Η παράμετρος key αντιπροσωπεύει το αναγνωριστικό UID του τρέχοντος εγγράφου.
  • Η παράμετρος outputType δείχνει τη μορφή του μετατρεπόμενου εγγράφου.
  • Η παράμετρος title περιέχει το όνομα του μετατρεπόμενου εγγράφου.
  • Η παράμετρος url περιλαμβάνει έναν σύνδεσμο προς το αρχείο που θέλουμε να μετατρέψουμε.

Οι τιμές των παραμέτρων fileType, outputType και url ανακτώνται από την πλευρά του πελάτη της εφαρμογής μας και αποθηκεύονται σε μεταβλητές. Η τιμή της παραμέτρου key θα δημιουργηθεί τυχαία και θα αποθηκευτεί επίσης σε μια μεταβλητή.

Ρύθμιση του έργου

Αφού εγκαταστήσουμε τα απαιτούμενα πακέτα, πηγαίνουμε στο αρχείο app.js και τα αρχικοποιούμε μαζί με το bodyParser για να επεξεργαστούμε τα δεδομένα του αιτήματος POST. Ρυθμίζουμε επίσης έναν δημόσιο φάκελο και μια μηχανή προβολής:

const express = require('express');
const app = express();
const axios = require('axios'); 
const jwt = require('jsonwebtoken');

app.use(express.urlencoded({extended: true}));
app.use(express.json());
app.use(express.static("public"));
app.set('view engine', 'ejs');

Στη συνέχεια προσθέτουμε διαδρομές. Η εφαρμογή μας θα περιλαμβάνει μια διαδρομή GET και μια διαδρομή POST. Αυτές θα μας επιτρέψουν να ανακτήσουμε τα δεδομένα εισόδου και να τα περάσουμε στο αίτημα POST στον ONLYOFFICE Document Server:

app.get ('/', function (reg, response){ 
}

app.post ('/converter', function(req, response){
}

Πλευρά πελάτη

Τώρα κάνουμε μια μικρή παράκαμψη και ρίχνουμε μια ματιά στην πλευρά του πελάτη του μετατροπέα μας. Εκεί θα εισάγουμε όλα τα απαραίτητα δεδομένα:

Build an online converter with ONLYOFFICE Conversion API

Build an online converter with ONLYOFFICE Conversion API

Η πλευρά του πελάτη περιλαμβάνει δύο σελίδες EJS:

  • homepage.ejs – μας επιτρέπει να ανακτήσουμε όλες τις τιμές που απαιτούνται για το αίτημα POST.
  • converter.ejs – μας επιτρέπει να κατεβάσουμε το μετατρεπόμενο αρχείο.

Ας ρίξουμε μια πιο προσεκτική ματιά στο homepage.ejs. Εδώ δημιουργήσαμε μια φόρμα που στέλνει δεδομένα στη διαδρομή POST. Πρώτα, παίρνουμε ένα URL για το αρχικό αρχείο. Θα το αποθηκεύσουμε στη μεταβλητή link στην πλευρά του διακομιστή:

<h1 class="h3 mb-3 font-weight-normal">Μετατρέψτε τα αρχεία OOXML σας εδώ!</h1>
        <input type="text"  class="form-control" id="inputEmail" placeholder="Επικολλήστε έναν σύνδεσμο προς το αρχείο" name="link" onchange="activateBox()">

Στη συνέχεια επιλέγουμε τον τύπο του αρχικού αρχείου στο συνδυαστικό πλαίσιο. Αργότερα, θα ανακτήσουμε αυτήν την τιμή και θα την αποθηκεύσουμε στη μεταβλητή inputType:

<select class="form-control" id="inputType" input type="text" disabled="true" name="inputType" onchange="comboBox()">
          <option value="" selected>Input File Type</option>
          <option value="docx">docx</option>
          <option value="txt">txt</option>
          <option value="pdf">pdf</option>
          <option value="rtf">rtf</option>
          <option value="xml">xml</option>
          <option value="csv">csv</option>
          <option value="xlsx">xlsx</option>
          <option value="xls">xls</option>
          <option value="ppt">ppt</option>
          <option value="pptx">pptx</option>
</select>

Στη συνέχεια επιλέγουμε την επιθυμητή μορφή αρχείου. Αυτή η τιμή θα αποθηκευτεί στη μεταβλητή outputType στην πλευρά του διακομιστή:

<select class="form-control" id="outputType" input type="text" disabled="true" name="outputType" onchange="activateButton()">
      <option value="" disabled selected hidden>Output File Type</option>
    </select>

Και χρησιμοποιούμε ένα κουμπί για να στείλουμε όλα τα δεδομένα στη διαδρομή POST του μετατροπέα:

<div class="button">
      <button type="submit" id="download" disabled="true" class="btn btn-lg btn-primary btn-block">Convert</button>
    </div>
    </form>

Δημιουργία ενός μετατροπέα

Τα δεδομένα που ανακτήθηκαν θα αναλυθούν στην πλευρά του διακομιστή της εφαρμογής μας. Ας πάμε τώρα στο αρχείο app.js και ας τα λάβουμε:

app.post ('/converter', function(req, response){
    let link = req.body.link;
    let outputType = req.body.outputType;
    let fileType = req.body.inputType;
});

Τώρα ας ρίξουμε μια ματιά στο δεύτερο συνδυαστικό μας πλαίσιο που στέλνει την τιμή outputType στη διαδρομή POST:

  <select class="form-control" id="outputType" input type="text" disabled="true" name="outputType" onchange="activateButton()">
      <option value="" disabled selected hidden>Output File Type</option>
    </select>

Η μεταβλητή outputType περιλαμβάνεται στο αίτημα POST στον διακομιστή. Καθορίζει τη μορφή του μετατρεπόμενου αρχείου. Ας εξετάσουμε τον κώδικα JavaScript που μας επιτρέπει να αλληλεπιδρούμε με τα στοιχεία της σελίδας και να ενσωματώσουμε μια δυναμική λίστα στο περιβάλλον χρήστη μας.

Η υπηρεσία μετατροπής εγγράφων είναι ένα πολύ ισχυρό εργαλείο και μπορεί να μετατρέψει διάφορους τύπους αρχείων. Ο στόχος μας είναι να χρησιμοποιήσουμε μια δυναμική λίστα που θα μας επιτρέψει να επιλέξουμε μια μορφή για το μετατρεπόμενο αρχείο. Αυτή η λίστα θα εμφανίζει όλες τις διαθέσιμες επιλογές για τον συγκεκριμένο τύπο αρχικού αρχείου.

Για να το κάνουμε αυτό, δημιουργούμε ένα αρχείο JSON που αποθηκεύει τιμές σύμφωνα με κάθε συγκεκριμένο τύπο:

Build an online converter with ONLYOFFICE Conversion API

Σημείωση! Για λόγους επίδειξης, συμπεριλάβαμε μόνο τις πιο συνηθισμένες μορφές OOXML. Για να μάθετε όλες τις υποστηριζόμενες επιλογές μετατροπής, επισκεφτείτε τη σελίδα τεκμηρίωσης.

Στη συνέχεια προσθέτουμε μια συνάρτηση που θα δημιουργήσει αυτήν τη δυναμική λίστα:

 function comboBox () {
     let type = document.querySelector("#inputType").value;
     let listDropDown = document.querySelector("#outputType");
     fetch("formats.json")
    .then(function(response){
      return response.json();
    })
    .then(function(data){
     let options = data[type];
     let out = "";
     out += `<option value="">Output File Type</option>`;
     Object.values(options).map(function(format){
        out += '<option value=' + format + '>' + format + '</option>';
      });
     listDropDown.innerHTML = out;
     listDropDown.disabled = false;
               });  
    };
        };

Αυτή η συνάρτηση λαμβάνει πρώτα την τιμή του συνδυαστικού πλαισίου inputType, όπου επιλέξαμε τη μορφή του αρχικού αρχείου. Την αντιστοιχούμε στη μεταβλητή type για να χρησιμοποιήσουμε αυτήν την τιμή αργότερα. Στη συνέχεια κάνουμε ένα αίτημα AJAX για να φορτώσουμε τα δεδομένα JSON. Μετά από αυτό, χρησιμοποιούμε την τιμή της μεταβλητής type ως ευρετήριο και επαναλαμβάνουμε τα δεδομένα που φορτώθηκαν για να τα εισάγουμε στις επιλογές της αναπτυσσόμενης λίστας.

Τώρα, κάθε φορά που επιλέγουμε τον τύπο του αρχικού αρχείου, το σενάριο εκτελείται και μας δείχνει τις διαθέσιμες επιλογές μετατροπής σύμφωνα με τη μορφή του αρχικού αρχείου.

Και αφού έχουμε όλα τα απαραίτητα δεδομένα, τα στέλνουμε στη διαδρομή converter κάνοντας κλικ στο κουμπί Μετατροπή.

Αλλά δεν τελειώνει εδώ. Για να κάνουμε την εφαρμογή μας πιο διαδραστική, θα προσθέσουμε συναρτήσεις που θα ενεργοποιούν τα στοιχεία του συνδυαστικού πλαισίου και του κουμπιού στη σωστή σειρά:

 function activateBox() {
      $("#inputType").prop('disabled', false)
    };
    
    function activateButton() {
      $("#download").prop('disabled', false)
      $("#outputTypeForm").hide();
    };

Ολόκληρος ο κώδικας JavaScript είναι ο ακόλουθος:

     function comboBox () {
     let type = document.querySelector("#inputType").value;
     let listDropDown = document.querySelector("#outputType");
     fetch("formats.json")
    .then(function(response){
      return response.json();
    })
    .then(function(data){
     let options = data[type];
     let out = "";
     out += `<option value="">Output File Type</option>`;
     Object.values(options).map(function(format){
        out += '<option value=' + format + '>' + format + '</option>';
      });
     listDropDown.innerHTML = out;
     listDropDown.disabled = false;
               });  
    };
    function activateBox() {
      $("#inputType").prop('disabled', false)
    };
    
    function activateButton() {
      $("#download").prop('disabled', false)
      $("#outputTypeForm").hide();
    };
        }

Ας ρίξουμε μια ματιά σε ό,τι συμβαίνει στην πλευρά του διακομιστή:

app.post ('/converter', function(req, response){
    let link = req.body.link;
    let outputType = req.body.outputType;
    let fileType = req.body.inputType;
    let key =  function () {
        var key = '';
        var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
                'abcdefghijklmnopqrstuvwxyz0123456789';
          
        for (let i = 1; i <= 12; i++) {
            var char = Math.floor(Math.random()
                        * str.length + 1);
              
            key += str.charAt(char);
        }
          
        return key;
    };
    const payload =  { 
        "async": true,
        "filetype": fileType,
        "key": key, 
        "outputtype": outputType,
        "title": `Converted Document.${outputType}`,
        "url": link       
    }
    let token = jwt.sign(payload, secret, options);
    
    axios.post( 
        'http://127.0.0.1:83/ConvertService.ashx',
        { 
           "token": token
        }) 
        .then((res) => response.render('converter.ejs', {
            link: res.data.fileUrl
        })) 
});

Στη διαδρομή converter, διαμορφώσαμε το αίτημα POST μας στον ONLYOFFICE Document Server και το αποθηκεύσαμε στη μεταβλητή payload. Χρησιμοποιήσαμε τις μεταβλητές fileType, outputType και link που αποθηκεύουν τα δεδομένα που ανακτήσαμε. Ωστόσο, έχουμε επίσης τη μεταβλητή key που περιέχει το μοναδικό αναγνωριστικό του τρέχοντος εγγράφου. Έτσι προσθέσαμε μια μικρή συνάρτηση παραπάνω για να τη δημιουργήσουμε:

    let key =  function () {
        var key = '';
        var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
                'abcdefghijklmnopqrstuvwxyz0123456789';
          
        for (let i = 1; i <= 12; i++) {
            var char = Math.floor(Math.random()
                        * str.length + 1);
              
            key += str.charAt(char)
        }   
        return key;
    };

Τώρα που έχουμε όλες τις απαραίτητες τιμές για το αίτημά μας, χρησιμοποιούμε το jwt.sign για να εφαρμόσουμε ένα token:

 let token = jwt.sign(payload, secret, options);

Η μέθοδος jwt.sign παίρνει τρεις παραμέτρους:

  • Payload που περιλαμβάνει όλες τις παραμέτρους που απαιτούνται για την επιτυχή μετατροπή.
  • Header που περιέχει πληροφορίες σχετικά με τον αλγόριθμο κρυπτογράφησης και το χρονικό πλαίσιο λήξης. Εφαρμόσαμε αυτές τις παραμέτρους στη μεταβλητή options.
  • Secret που αντιπροσωπεύει ένα μυστικό κλειδί που δημιουργείται από τον ONLYOFFICE Document Server. Αυτό το μυστικό μπορεί να βρεθεί στο αρχείο local.json, ή εκτελώντας την ακόλουθη εντολή στο terminal:
sudo docker exec <dockerID> /var/www/onlyoffice/documentserver/npm/json -f /etc/onlyoffice/documentserver/local.json 'services.CoAuthoring.secret.session.string'

Αφού υπογράψουμε το token, χρησιμοποιούμε ένα αίτημα POST axios για να το στείλουμε στον διακομιστή. Στη συνέχεια αποδίδουμε τη σελίδα converter.ejs που λαμβάνει την απάντηση από τον ONLYOFFICE Document Server:

 axios.post( 
        'http://127.0.0.1:83/ConvertService.ashx',
        { 
           "token": token
        }) 
        .then((res) => response.render('converter.ejs', {
            link: res.data.fileUrl
        }))

Ακολουθεί ένα δείγμα της απάντησης σε μορφή JSON:

{     "endConvert": true,     "fileType": "docx",     "fileUrl": "https://documentserver/url-to-converted-document.pdf",     "percent": 100 }

Αυτό που χρειαζόμαστε εδώ είναι το στοιχείο fileUrl. Είναι ένας σύνδεσμος προς το μετατρεπόμενο αρχείο. Έτσι το προσπελαύνουμε και το στέλνουμε στη σελίδα converter.ejs:

.then((res) => response.render('converter.ejs', {
            link: res.data.fileUrl
        })) 
});

Σε αυτήν τη σελίδα, δημιουργήσαμε δύο κουμπιά. Το κουμπί Επιστροφή μας μεταφέρει πίσω στη σελίδα homepage.ejs και το κουμπί Λήψη ανοίγει τον σύνδεσμο που στείλαμε στη σελίδα και κατεβάζει το μετατρεπόμενο αρχείο:

Build an online converter with ONLYOFFICE Conversion API

Σημείωση! Για να μάθετε περισσότερα σχετικά με το JWT, επισκεφτείτε τη σελίδα τεκμηρίωσης.

Ολόκληρος ο κώδικας της πλευράς του διακομιστή είναι ο ακόλουθος:

const express = require('express');
const app = express();
const axios = require('axios'); 
const jwt = require('jsonwebtoken');
const options = {algorithm: "HS256", expiresIn: "5m"};
const secret = "k1gWQdmDX6ZGiWw5r3g2";
app.use(express.urlencoded({extended: true}));
app.use(express.json());
app.use(express.static("public"));
app.set('view engine', 'ejs');
app.get ('/', function (reg, response){ 
    response.render('homepage.ejs', {
    })
});
app.post ('/converter', function(req, response){
    let link = req.body.link;
    let outputType = req.body.outputType;
    let fileType = req.body.inputType;
    let key =  function () {
        var key = '';
        var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 
                'abcdefghijklmnopqrstuvwxyz0123456789';
          
        for (let i = 1; i <= 12; i++) {
            var char = Math.floor(Math.random()
                        * str.length + 1);
              
            key += str.charAt(char);
        }
          
        return key;
    };
    const payload =  { 
        "async": true,
        "filetype": fileType,
        "key": key, 
        "outputtype": outputType,
        "title": `Converted Document.${outputType}`,
        "url": link       
    }
    let token = jwt.sign(payload, secret, options);
    
    axios.post( 
        'http://127.0.0.1:83/ConvertService.ashx',
        { 
           "token": token
        }) 
        .then((res) => response.render('converter.ejs', {
            link: res.data.fileUrl
        })) 
});
app.listen(3000,() => console.log('the server is up and running'));

Και τώρα, ας εκτελέσουμε τον μετατροπέα μας και ας δούμε πώς λειτουργεί!

Οι λύσεις του ONLYOFFICE είναι εξαιρετικά πολυλειτουργικές. Παρέχουν στους χρήστες και τους προγραμματιστές μια μοναδική εμπειρία και τους επιτρέπουν να χειρίζονται έγγραφα ooXML με διάφορους τρόπους. Ελπίζουμε ότι θα βρείτε τις παραπάνω πληροφορίες χρήσιμες και θα τις εφαρμόσετε στα μελλοντικά σας έργα. Μη διστάσετε να αφήσετε σχόλια, να κάνετε ερωτήσεις ή να μοιραστείτε τις ιδέες σας μαζί μας. Είμαστε ανοιχτοί σε προτάσεις και συνεργασία. Καλή τύχη στις εξερευνήσεις σας!

Δημιουργήστε τον δωρεάν λογαριασμό ONLYOFFICE σας

Online προβολή, επεξεργασία και συνεργασία σε έγγραφα, υπολογιστικά φύλλα, παρουσιάσεις, φόρμες και αρχεία PDF.