Εισαγωγή

Το εισαγωγικό άρθρο δείχνει το βασικό σχήμα της μετατροπής: Document.ToHtml(), Document.ToMarkdown() και Document.ToDocx(), το καθένα κλήθηκε χωρίς ορίσματα για να πάρει μια λογική προεπιλογή. Κάθε μία από αυτές τις μεθόδους δέχεται ένα αντικείμενο επιλογών που αλλάζει το τι πραγματικά παράγεται — σημασιολογική σήμανση έναντι μιας πιστής σε pixel αντιγραφής, ένα επαναρροήσιμο έγγραφο Word έναντι ενός που αναπαράγει την ακριβή διάταξη κάθε σελίδας.

Αυτή η ανάρτηση καλύπτει αυτές τις επιλογές, καθώς και μια κατεύθυνση μετατροπής που η εισαγωγή δεν αγγίζει καθόλου: την επικύρωση ενός εγγράφου έναντι των προτύπων PDF/A, PDF/X και PDF/UA και την αποκατάστασή του προς συμμόρφωση με το Document.ConvertToPdfA() και τα αδέλφια του.


Τι περιλαμβάνεται

HTML Εξαγωγή: Σημασιολογικό vs Σταθερό

Document.ToHtml() που κλήθηκε χωρίς επιλογές διασχίζει το δέντρο δομής του εγγράφου και εκδίδει επαναρροήσιμη σήμανση — τίτλους και παραγράφους που διαβάζονται φυσικά σε ένα πρόγραμμα περιήγησης σε οποιοδήποτε πλάτος. Αυτή η λειτουργία εξαρτάται από το έγγραφο να είναι πρώτα επισημασμένο (Document.CreateStructTree() ή μια ισοδύναμη διαδικασία σήμανσης); χωρίς δέντρο δομής, η εξαγωγή επανέρχεται σε ένα απλό ευριστικό σώμα αντί για πραγματική σημασιολογική σήμανση. Η μετάδοση του { mode: 'fixed', fonts: 'embed' } αλλάζει εντελώς σε μια διαφορετική στρατηγική απόδοσης: κάθε σελίδα γίνεται τοποθετημένο SVG και απόλυτα τοποθετημένο κείμενο, με κάθε ενσωματωμένο πρόγραμμα γραμματοσειράς ενσωματωμένο ως base64 WOFF @font-face ώστε η σελίδα να φαίνεται η ίδια χωρίς ο αναγνώστης να έχει εγκατεστημένες τις γραμματοσειρές.

// Semantic mode reflows from the structure tree, so this must run after the
// tagging pass: ToHtml falls back to a heuristic body when GetStructTree() is
// null, and the export loses its heading structure silently.
const semantic = doc.ToHtml();
const fixed = doc.ToHtml({ mode: 'fixed', fonts: 'embed' });

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

Εξαγωγές Word και Vector

Document.ToDocx() που καλείται χωρίς επιλογές παράγει ένα επαναρροημένο .docx: παραγράφους και εικόνες που ένας επεξεργαστής κειμένου μπορεί να επανατυλίξει και να επεξεργαστεί όπως ένα κανονικό έγγραφο. Η παράδοση του { mode: 'textbox' } αντί αυτού διατηρεί τη γεωμετρία κάθε σελίδας, τοποθετώντας το περιεχόμενο σε σταθερά πλαίσια κειμένου αντί να το αφήνει να επαναρροήσει — πιο κοντά σε ένα πιστό οπτικό αντίγραφο παρά σε ένα επεξεργάσιμο έγγραφο. Το Page.ToSvg() αποδίδει μια μονή σελίδα σε μια αυτόνομη συμβολοσειρά <svg>, χρήσιμη όταν χρειάζεται ένα διανυσματικό, ανεξάρτητο από την ανάλυση αντίγραφο μιας σελίδας αντί για raster image.

import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg();               // standalone <svg> string
const docx = doc.ToDocx();                       // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' });   // .docx keeping each page's own geometry

Επικύρωση και Μετατροπή σε PDF/A, PDF/X και PDF/UA

Document.ValidatePdfA(), Document.ValidatePdfX() και Document.ValidatePdfUa() ελέγχουν το έγγραφο έναντι ενός επιμελημένου, μηχανικά ελέγξιμου υποσυνόλου του αντίστοιχου προτύπου — PDF/A (ISO 19005) για μακροπρόθεσμη αρχειοθέτηση, PDF/X (ISO 15930) για παραγωγή εκτύπωσης, και PDF/UA (ISO 14289-1) για προσβασιμότητα — και επιστρέφουν ένα ValidationReport με μια σημαία Passed που συνοψίζει το αποτέλεσμα. Το Document.ConvertToPdfA() (και το ισοδύναμο ConvertToPdfX()/ConvertToPdfUa()) προσπαθεί να διορθώσει το έγγραφο προς εκείνο το επίπεδο, στη συνέχεια επανελέγχει, επιστρέφοντας ένα ConversionReport που αναφέρει ποιες ενέργειες εφαρμόστηκαν πράγματι και ποια ζητήματα παραμένουν άλυτα.

import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('in.pdf');
const pdfa = doc.ValidatePdfA('2b');
console.log(`validate: PDF/A-2b ${pdfa.Passed ? 'passes' : 'fails'}`);

// Conversion runs against a copy: the live document is still saved
// unconverted, so ConvertToPdfA must never touch it directly.
const pages = doc.Pages;
const allPages: number[] = [];
for (let i = 1; i <= pages.length; i++) allPages.push(i);
const copy = doc.ExtractPages(allPages);
const conversion = copy.ConvertToPdfA('2b');

console.log(`pdf/a convert: ${conversion.applied.length} action(s) applied, `
  + `${conversion.unresolved.length} unresolved`);
console.log(`result: ${conversion.passed ? 'passes' : 'still fails'} PDF/A-2b`);

Η μετατροπή δεν εγγυάται πλήρη συμμόρφωση σε μία μόνο εκτέλεση — κοινές αιτίες μιας παραμένουσας αποτυχίας περιλαμβάνουν μη ενσωματωμένες γραμματοσειρές και έλλειψη προορισμού εξόδου, τα οποία εμφανίζονται και στα conversion.unresolved.


Γρήγορη Εκκίνηση

Εγκαταστήστε το πακέτο, έπειτα αποδώστε μία σελίδα σε SVG και ολόκληρο το έγγραφο σε επαναρροημένο HTML και DOCX:

git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run build
import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('in.pdf');

const svg = doc.Pages[0].ToSvg();   // standalone <svg> string
const html = doc.ToHtml();          // reflowable HTML (falls back without a structure tree)
const docx = doc.ToDocx();          // .docx bytes, reflowed, images in the package

// fs.writeFileSync('page1.svg', svg);
// fs.writeFileSync('out.html', html);
// fs.writeFileSync('out.docx', docx);

Υποστηριζόμενες Μορφές

ΜορφήΕπέκτασηΑνάγνωσηΕγγραφή
PDFpdf
Markdownmd
SVGsvg
TIFFtiff
DOCXdocx
HTMLhtml
PNGpng
EPUBepub

Ανοιχτός Κώδικας & Άδειες

Aspose.PDF FOSS για TypeScript κυκλοφορεί υπό την άδεια MIT, με τον πηγαίο κώδικα δημοσιευμένο στο GitHub. Δεν υπάρχει υδατογράφημα αξιολόγησης, όριο χρήσης ή ξεχωριστό αρχείο άδειας προς διαχείριση, και η βιβλιοθήκη μπορεί να χρησιμοποιηθεί σε εμπορικά προϊόντα χωρίς δικαιώματα.

Το πακέτο βρίσκεται αυτή τη στιγμή στην έκδοση 0.1.0, αντικατοπτρίζοντας ενεργή ανάπτυξη σε πρώιμο στάδιο. Το Node.js (>=22) είναι η μόνη απαίτηση χρόνου εκτέλεσης, και το πακέτο δεν έχει άλλες εξαρτήσεις τρίτων.


Ξεκινώντας

Σχετικοί Πόροι