Introducere
Postarea introductory post arată forma de bază a conversiei: Document.ToHtml(), Document.ToMarkdown() și Document.ToDocx(), fiecare apelată fără argumente pentru a obține o valoare implicită rezonabilă. Fiecare dintre aceste metode primește un obiect de opțiuni care modifică rezultatul efectiv — markup semantic versus o copie fidelă la nivel de pixel, un document Word reflowable versus unul care reproducă exact aspectul fiecărei pagini.
Această postare acoperă acele opțiuni, plus o direcție de conversie pe care introducerea nu o atinge deloc: validarea unui document conform standardelor PDF/A, PDF/X și PDF/UA și remedierea acestuia pentru a se conforma cu Document.ConvertToPdfA() și frații săi.
Ce este inclus
HTML Export: Semantic vs Fix
Document.ToHtml() apelat fără opțiuni parcurge arborele de structură al documentului și emite markup reflowable — titluri și paragrafe care se citesc natural într-un browser la orice lățime. Acest mod depinde de documentul fiind etichetat mai întâi (Document.CreateStructTree() sau o trecere de etichetare echivalentă); fără un arbore de structură, exportul revine la un corp simplu euristic în loc de un markup semantic real. Transmiterea { mode: 'fixed', fonts: 'embed' } comută complet la o altă strategie de redare: fiecare pagină devine un SVG poziționat și text plasat absolut, cu fiecare program de font încorporabil inserat ca un base64 WOFF @font-face astfel pagina arată la fel fără ca cititorul să aibă fonturile instalate.
// 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' });
Cele două ieșiri servesc scopuri diferite: HTML semantic este ceea ce dorești pentru citirea sau republicarea conținutului pe web, iar HTML fix este ceea ce vrei când aspectul vizual exact al paginii trebuie să rămână neschimbat într-un browser.
Exporturi Word și Vector
Document.ToDocx() apelat fără opțiuni produce un .docx rearanjat: paragrafe și imagini pe care un procesor de text le poate reîmpacheta și edita ca pe un document normal. Transmiterea lui { mode: 'textbox' } în schimb păstrează geometria proprie a fiecărei pagini, plasând conținutul în casete de text fixe în loc să îl lase să se rearanjeze — mai apropiat de o copie vizuală fidelă decât de un document editabil. Page.ToSvg() redă o singură pagină într-un șir <svg> autonom, util când este necesară o copie vectorială, independentă de rezoluție, a unei pagini în loc de o imagine raster.
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
Validarea și conversia la PDF/A, PDF/X și PDF/UA
Document.ValidatePdfA(), Document.ValidatePdfX() și Document.ValidatePdfUa() verifică fiecare documentul față de un subset curat, verificabil de mașină, al standardului corespunzător — PDF/A (ISO 19005) pentru arhivare pe termen lung, PDF/X (ISO 15930) pentru producție tipografică și PDF/UA (ISO 14289-1) pentru accesibilitate — și returnează un ValidationReport cu un indicator Passed care rezumă rezultatul. Document.ConvertToPdfA() (și echivalentul ConvertToPdfX()/ConvertToPdfUa()) încearcă să remedieze documentul la acel nivel, apoi revalidează, returnând un ConversionReport care enumeră acțiunile aplicate efectiv și problemele rămase nerezolvate.
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`);
Conversia nu este garantată să atingă conformitatea completă într-un singur pas — cauzele comune ale unei erori persistente includ fonturi neîncorporate și o intenție de ieșire lipsă, ambele apărând în conversion.unresolved.
Pornire rapidă
Instalați pachetul, apoi redați o pagină în SVG și întregul document în HTML rearanjat și 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 buildimport { 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);
Formate suportate
| Format | Extensie | Citire | Scriere |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Open Source & Licențiere
Aspose.PDF FOSS pentru TypeScript este lansat sub licența MIT, cu codul sursă publicat pe GitHub. Nu există filigran de evaluare, limită de utilizare sau fișier de licență separat de gestionat, iar biblioteca poate fi folosită în produse comerciale fără redevențe.
Pachetul este în prezent la versiunea 0.1.0, reflectând dezvoltarea activă în stadiu incipient. Node.js (>=22) este singura cerință de runtime, iar pachetul nu are alte dependențe de terțe părți.