Conversion
Conversion
หน้านี้ครอบคลุมการเรนเดอร์ PDF ไปยังรูปแบบอื่นและการแปลงเอกสารให้สอดคล้องกับ PDF/A. Document เปิดเผยวิธี To*() หนึ่งวิธีต่อรูปแบบผลลัพธ์สำหรับเอกสารทั้งหมด; วิธีเดียวกันนี้มีอยู่ใน Page เพื่อเรนเดอร์หน้าเดียว.
การเรนเดอร์ไปยังรูปแบบเอกสารอื่น
Document.ToHtml(), Document.ToDocx() และ Document.ToMarkdown() เรนเดอร์ทุกหน้า; Page.ToSvg() และ Page.ToImage() เรนเดอร์หนึ่งหน้าเป็นสตริง SVG แยกหรือไบต์ PNG. แต่ละตัวรับตัวเลือกของตนเอง — mode บน DocxOptions (‘flow’ รีฟลอว์เนื้อหา, ’textbox’ รักษาเรขาคณิตของแต่ละหน้า) และ images บน MarkdownExportOptions (‘inline’ ฝังข้อมูลภาพแบบ URI, ’external’ เขียนไฟล์แยกลงใน imageDir).
const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg(); // standalone <svg> string
const png = doc.Pages[0].ToImage({ scale: 2 }); // Uint8Array of PNG bytes @144 DPI
const html = doc.ToHtml(); // standalone semantic HTML, all pages
const md = doc.ToMarkdown(); // GFM Markdown, all pages
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' }); // .docx keeping each page's own geometry
ImageOptions (สำหรับ Page.ToImage()) ยังรับ format, quality, scale, width / height อย่างชัดเจน, และ background (‘white’ หรือ ’transparent’).
การแปลงไปสู่ PDF/A
Document.ConvertToPdfA() พยายามแก้ไขเอกสารให้สอดคล้องกับ PDF/A level (‘b’ หรือ ‘u’) และตรวจสอบความถูกต้องอีกครั้ง, ส่งคืน ConversionReport พร้อมกับ applied (การกระทำการแก้ไขที่ทำ), unresolved (ปัญหาที่ไม่สามารถแก้ไขได้), และ passed. เรียกใช้บนสำเนา — ตัวอย่างเช่นสำเนาที่สร้างด้วย Document.ExtractPages() — เพื่อให้เอกสารที่ทำงานอยู่จริงไม่ถูกเปลี่ยนแปลงโดยการแปลง.
// ExtractPages gives an independent copy; ConvertToPdfA never touches the original.
const copy = doc.ExtractPages(doc.Pages.map((_, i) => i + 1));
const conversion = copy.ConvertToPdfA('2b');
console.log(`applied ${conversion.applied.length} action(s), `
+ `${conversion.unresolved.length} unresolved, `
+ `result: ${conversion.passed ? 'passes' : 'still fails'} PDF/A-2b`);
copy.WriteTo('output-pdfa.pdf');รูปแบบการส่งออกอื่นๆ
นอกเหนือจาก HTML, Markdown, DOCX, SVG, และ PNG, ไลบรารียังสามารถส่งออก TIFF (TiffExportOptions, encodeTiff()) และนำเข้า/ส่งออกค่าฟิลด์ AcroForm ใน FDF และ XFDF (exportFdfFile(), exportXfdfFile(), importFdfFile(), importXfdfFile()) — มีประโยชน์สำหรับการแลกเปลี่ยนข้อมูลฟอร์มที่กรอกแล้วแยกจากไฟล์ PDF เอง.
เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- ให้ทำงาน
Document.ConvertToPdfA()บนสำเนา (เช่นจากDocument.ExtractPages()) อย่าทำบนเอกสารจริงที่คุณยังต้องบันทึกโดยไม่แปลง. - ตรวจสอบ
ConversionReport.unresolvedแม้ว่าpassedจะเป็นtrueเพื่อระดับการตรวจสอบที่ผ่อนคลายกว่า — การแก้ไขบางอย่างจะสำเร็จเต็มที่เฉพาะในระดับที่เข้มงวดกว่า. - ใช้
mode: 'textbox'บนDocxOptionsเมื่อผลลัพธ์ DOCX ต้องรักษาเรขาคณิตภาพของแต่ละหน้าอย่างแม่นยำ; ใช้โหมด'flow'เริ่มต้นเมื่อควรให้ข้อความไหลใหม่เหมือนเอกสารประมวลผลคำปกติ. - ส่งผ่าน
images: 'external'และimageDirบนMarkdownExportOptionsสำหรับเอกสารขนาดใหญ่ แทนการใช้ URI ข้อมูลแบบอินไลน์เริ่มต้น เพื่อทำให้ไฟล์ Markdown มีขนาดเล็กลง.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | การแก้ไข |
|---|---|---|
ConvertToPdfA() ยังรายงาน passed: false | ไม่ใช่ทุกปัญหาที่ ConversionReport.unresolved รายการสามารถแก้ไขอัตโนมัติได้ (เช่น ฟอนต์ฝังหายหรือ /OutputIntent ที่หายไป) | ดำเนินการตามกฎ unresolved เฉพาะด้วยตนเอง แล้วเรียกใช้ ConvertToPdfA() ใหม่ |
| เอกสารสดถูกแก้ไขโดยไม่ได้คาดคิดหลังจากการพยายามแปลง PDF/A | ConvertToPdfA() ถูกเรียกใช้โดยตรงบนเอกสารทำงานแทนการใช้สำเนา | เรียกใช้บนสำเนาที่สร้างด้วย Document.ExtractPages() |
| การส่งออก Markdown สร้างไฟล์ขนาดใหญ่หนึ่งไฟล์ | ค่าเริ่มต้นของ images: 'inline' ฝังรูปภาพทุกภาพเป็น data URI | ส่ง { images: 'external', imageDir: '...' } เพื่อบันทึกรูปภาพเป็นไฟล์แยก |
| ผลลัพธ์ DOCX สูญเสียการจัดหน้าเดิม | ค่าเริ่มต้นของ mode: 'flow' ปรับรูปแบบเนื้อหาเหมือนโปรเซสเซอร์ข้อความ | ส่ง { mode: 'textbox' } เพื่อรักษาเรขาคณิตของแต่ละหน้า |
FAQ
ไฟล์รูปแบบใดบ้างที่ PDF สามารถแปลงเป็นได้?
HTML, Markdown, และ DOCX สำหรับเอกสารทั้งหมด (Document.ToHtml() / ToMarkdown() / ToDocx()); SVG และ PNG ต่อหน้า (Page.ToSvg() / Page.ToImage()); รวมถึงการส่งออกแบบฟอร์มเป็น TIFF และ FDF/XFDF.
การแปลงเป็น PDF/A ทำให้เอกสารต้นฉบับของฉันเปลี่ยนแปลงหรือไม่?
จะทำก็ต่อเมื่อคุณเรียก ConvertToPdfA() โดยตรงบนมันเท่านั้น เรียกใช้บนสำเนา — ตัวอย่างเช่น doc.ExtractPages(doc.Pages.map((_, i) => i + 1)) — เพื่อให้เอกสารต้นฉบับไม่ถูกแปลง.
ฉันจะรู้ได้อย่างไรว่าการแปลง PDF/A ประสบความสำเร็จจริงหรือไม่?
ตรวจสอบ ConversionReport.passed. applied แสดงรายการสิ่งที่การแปลงได้แก้ไข, และ unresolved แสดงรายการสิ่งที่ไม่สามารถทำได้ — ตรวจสอบ unresolved แม้ในขณะที่ passed เป็น true.
ฉันสามารถส่งออกเฉพาะค่าฟิลด์แบบฟอร์มที่กรอกแล้วได้หรือไม่ โดยไม่รวมไฟล์ PDF เอง?
ใช่ — exportFdfFile() และ exportXfdfFile() เขียนค่าฟิลด์ AcroForm ปัจจุบันไปยังไฟล์ FDF หรือ XFDF แยกต่างหาก; importFdfFile() / importXfdfFile() อ่านกลับเข้าเอกสาร.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
Document.ToHtml() / Document.ToDocx() / Document.ToMarkdown() | แปลงทุกหน้าเป็นรูปแบบเอกสารอื่น |
Page.ToSvg() / Page.ToImage() | แปลงหน้าเดียวเป็น SVG หรือ PNG |
DocxOptions / MarkdownExportOptions / ImageOptions | ตัวเลือกการแปลงตามรูปแบบ |
Document.ConvertToPdfA() | แก้ไขเอกสารให้ถึงระดับ PDF/A แล้วทำการตรวจสอบใหม่ |
ConversionReport | ผลลัพธ์การแปลง: applied, unresolved, passed |
TiffExportOptions / encodeTiff() | ส่งออกเป็น TIFF |
exportFdfFile() / exportXfdfFile() / importFdfFile() / importXfdfFile() | ส่งออกหรือ นำเข้าค่าในฟิลด์ AcroForm เป็น FDF/XFDF |