מבוא

הפוסט המבואי מציג את הצורה הבסיסית של ההמרה: Document.ToHtml(), Document.ToMarkdown() ו-Document.ToDocx(), שכל אחד מהם נקרא ללא ארגומנטים כדי לקבל ערך ברירת מחדל סביר. כל אחת מהשיטות האלה מקבלת אובייקט אפשרויות שמשנה מה בפועל מתקבל — סימון סמנטי לעומת העתק מדויק בפיקסלים, מסמך Word ברמת זרימה מחדש לעומת מסמך המשחזר את הפריסה המדויקת של כל עמוד.

פוסט זה מכסה את האפשרויות הללו, בנוסף לכיוון המרה שהמבוא אינו נוגע בו כלל: אימות מסמך מול הסטנדרטים PDF/A, PDF/X ו-PDF/UA ותיקון שלו כדי לעמוד בתקן Document.ConvertToPdfA() והקשרים שלו.


מה כלול

ייצוא HTML: סמנטי לעומת קבוע

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 הסמנטי הוא מה שאתה רוצה לקריאה או לפרסום מחדש של תוכן ברשת, ו-HTML הקבוע הוא מה שאתה רוצה כאשר על פריסת העמוד הוויזואלית המדויקת לשרוד ללא שינוי בדפדפן.

ייצוא Word ו-Vector

Document.ToDocx() שנקרא ללא אפשרויות מייצר .docx מחדש: פסקאות ותמונות שמעבד תמלילים יכול לעטוף מחדש ולערוך כמו מסמך רגיל. העברת { mode: 'textbox' } במקום שומרת על הגאומטריה של כל דף, ממקמת את התוכן בתיבות טקסט קבועות במקום לאפשר לו להתמזג — קרוב יותר להעתק חזותי מדויק מאשר למסמך שניתן לעריכה. Page.ToSvg() מציג דף יחיד כמחרוזת <svg> נפרדת, שימושי כאשר נדרשת העתק וקטורי, בלתי תלוי ברזולוציה של דף אחד במקום תמונת רסטר.

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) הוא דרישת ההפעלה היחידה, ולחבילה אין תלות חיצונית נוספת.


התחלה

משאבים קשורים