กระบวนการเรนเดอร์

จากเอกสารสู่ภาพหน้า

ระหว่าง OpenDocumentAsync กับ PNG ที่ส่งถึงเบราว์เซอร์มีสองขั้นตอนที่แตกต่างกัน: การแก้ไขผู้ดู (เครื่องยนต์ใดที่โหลดเอกสาร ซึ่งกำหนดครั้งเดียวต่อการเปิด) และ การประมวลผลหน้า (สิ่งที่เกิดขึ้นกับภาพแต่ละหน้าตามคำขอแต่ละครั้งไปยัง DocImage.axd). การเข้าใจทั้งสองขั้นตอนอธิบายว่าทำไมรูปแบบหนึ่งจึงแสดงผลแบบนั้น — และ DefaultRender ทำหน้าที่จริง ๆ อย่างไร.

ขั้นตอนที่ 1 — การแก้ไขผู้ดูรูปแบบ

โรงงานจะแมปส่วนขยายไฟล์ไปยังผู้ดูผ่านแคตาล็อกรูปแบบ โดยมีระดับความสำคัญสามระดับ:

  1. ผู้ดูแบบกำหนดเองเป็นอันดับแรก. สิ่งใดที่คุณลงทะเบียนด้วย DoconutOptions.RegisterViewer(extension, factory, defaultConfig?) จะชนะเหนือผู้ดูที่มาพร้อมระบบทั้งหมด.
  2. ผู้ดูตระกูลที่มาพร้อมระบบ. แคตาล็อกแมปส่วนขยายที่สามารถดูได้แต่ละตัวไปยังตระกูลผู้ดู — Word, Excel, PowerPoint, Pdf, Cad, Dgn, Image, Tiff, Psd, Email, Visio, Project, Xps, Epub, Txt, Html, Mht, Dcn — แต่ละตระกูลมีอะแดปเตอร์เครื่องยนต์ของตนเอง. หากปลั๊กอินที่มีลิขสิทธิ์ให้ผู้ดูสำหรับส่วนขยายเดียวกัน ผู้ดูจากปลั๊กอินจะทดแทนผู้ดูที่มาพร้อมระบบ.
  3. รูปแบบเฉพาะปลั๊กอิน. บางส่วนขยายไม่มีผู้ดูที่มาพร้อมระบบเลย — DICOM (.dcm, .ima) มีอยู่เฉพาะผ่านปลั๊กอิน DICOM. การเปิดไฟล์ที่ไม่มีความสามารถที่จำเป็นจะทำให้เกิดข้อผิดพลาด:
text
LicenseException: This document type requires the 'Dicom' plugin license.

ส่วนขยายที่ไม่มีผู้ดูใด ๆ จะทำให้เกิด FormatNotSupportedException.

หลังจากการแก้ไข ค่าการกำหนดค่าจะถูกสรุป: วัตถุการกำหนดค่าที่คุณส่งมาโดยตรง หากมี, หรือค่าการกำหนดค่าตั้งต้นของรูปแบบจากแคตาล็อก. DocOptions.Password จะถูกคัดลอกเข้าไปในค่าการกำหนดสําหรับเอกสารที่มีการป้องกัน.

ขั้นตอนที่ 1b — โหมดเปลี่ยนเส้นทาง (DefaultRender = false)

การกำหนดค่าตามรูปแบบส่วนใหญ่จะเปิดเผยแฟล็ก DefaultRender. แฟล็กนี้เลือกระหว่างสองเส้นทางที่แตกต่างกันอย่างพื้นฐาน:

  • DefaultRender = true — เอกสารถูกเรนเดอร์โดยตรงเป็นภาพหน้า.
  • DefaultRender = false — เอกสารถูก แปลงเป็น PDF ในหน่วยความจำ ก่อน, เครื่องยนต์ต้นทางจะถูกปล่อย, และผู้ดู PDF จะเข้ามาดำเนินการต่อ. PDF ที่สร้างขึ้นจะมีข้อความจริง, ทำให้การค้นหาเต็มข้อความได้ไฮไลท์ที่แม่นยำ; กระบวนการจะเปิด AllowSearch และ AllowCopy สำหรับ PDF ที่ถูกเปลี่ยนเส้นทาง, เนื่องจากการแปลงนี้ไม่ปรากฏต่อผู้ใช้.

โดยค่าเริ่มต้น XPS และ MHT จะใช้เส้นทางเปลี่ยนเส้นทาง. การฉายเป็น PDF ให้การค้นหาแบบเนทีฟกับรูปแบบเช่น HTML และ Microsoft Project. หาก PDF ที่ได้มีภาพโดยไม่มีชั้นข้อความ, พิกเซลเหล่านั้นจะไม่สามารถค้นหาได้.

ใช้โหมดเปลี่ยนเส้นทางเมื่อคุณต้องการการฉายที่สามารถค้นหาและมีข้อความ — แม้ว่าจะต้องเสียค่าแปลงล่วงหน้าเมื่อเปิดเอกสาร.

ขั้นตอนที่ 2 — กระบวนการภาพหน้า

แต่ละคำขอหน้าไปยัง DocImage.axd จะดำเนินตามลำดับคงที่:

text
raw page PNG → watermark → rotate/flip → scale → annotation burn → PNG to the response
  • Watermark — ถูกนำมาใช้จากสถานะลิขสิทธิ์ (ไม่มีลิขสิทธิ์, ลิขสิทธิ์ชั่วคราวหรือสมัครสมาชิกที่หมดอายุ, โดเมนไม่ถูกต้อง, การสร้างนอกเวอร์ชันของลิขสิทธิ์) และจาก DocOptions.Watermark สำหรับข้อความของคุณเอง. เว็บไซต์ที่มีลิขสิทธิ์แต่ไม่มีลายน้ำกำหนดเองจะข้ามขั้นตอนนี้.
  • Rotate/flip — สถานะต่อหน้า ที่ผู้ใช้ตั้งค่าในวิดเจ็ต (90°/180°/270°, การพลิกแนวนอนและแนวตั้ง) จะถูกเก็บในเซสชันและนำไปใช้กับการเรนเดอร์หน้าต่อไปทุกครั้ง.
  • Scale — ภาพย่อและระดับการซูมถูกสร้างโดยการสเกลหน้าที่เรนเดอร์ไปยังขนาดที่ร้องขอ.
  • Annotation burn — คำอธิบายที่บันทึกไว้จะถูกวาดลงบนบิตแมพ, ดังนั้นการส่งออกและภาพหน้าจะเห็นคำอธิบายเหล่านั้น.
  • Encoding — ผลลัพธ์จะถูกเข้ารหัสเป็น PNG และเขียนโดยตรงไปยังการตอบกลับ.

ข้อผิดพลาดภายในตัวจัดการจะถูกส่งกลับเป็น ภาพข้อผิดพลาด PNG (ข้อความสีแดงบนพื้นขาว) พร้อมสถานะ 200, แทนที่จะเป็นหน้า HTTP error, เพื่อให้วิดเจ็ตสามารถแสดงในพื้นที่หน้าได้.

การแคชหน้า

BaseConfig.CachePages (ค่าเริ่มต้น true) จะเก็บภาพหน้าที่เรนเดอร์ไว้ในหน่วยความจำตลอดอายุของเซสชันเอกสาร, ดังนั้นการเยี่ยมชมหน้าซ้ำจะไม่ต้องเรนเดอร์ใหม่. BaseConfig.ImageResolution (25–300 DPI, 0 = ค่าเริ่มต้นของรูปแบบ) เป็นตัวควบคุมคุณภาพและหน่วยความจำหลัก; ค่าเริ่มต้นของแต่ละรูปแบบถูกระบุใน การตั้งค่ารูปแบบ.

บนโหนดเดียว, เซสชันและหน้าที่แคชอยู่ในหน่วยความจำของกระบวนการ worker. การรีไซเคิลพูลแอปพลิเคชัน — ตามกำหนด, หรือโดยการแก้ไข Web.config หรือการหมดเวลาไม่ทำงาน — จะทำให้เซสชันเอกสารที่เปิดทั้งหมดหายไป, และวิดเจ็ตจะแสดงข้อความ Document session not found. Please re-open document. ในโหมดกระจาย (ดู เซสชันและความปลอดภัย), เซสชันจะถูกสร้างใหม่จากที่เก็บร่วมกันแทน.

ที่ไหนควรปรับแต่งอะไร

คุณต้องการปรับ
หน้าที่คมชัดขึ้นImageResolution on the format config
การค้นหาข้อความที่แม่นยำบน HTML, EPUB, email, MHT หรือ MPPDefaultRender = false on the format config
ใช้หน่วยความจำน้อยลงบนเอกสารขนาดใหญ่CachePages = false, and close sessions explicitly
ตราของคุณบนทุกหน้าDocOptions.Watermark

หน้านี้เป็นประโยชน์หรือไม่?