ภาพรวม

เอกสารสเปรดชีต คือเอกสารที่มีข้อมูลในรูปแบบตาราง — อยู่ในแถวและคอลัมน์ พวกมันยังเรียกว่า เวิร์กบุ๊ก อีกด้วย มีรูปแบบของเอกสารสเปรดชีตหลายประเภท — Office Open XML (เช่น XLSX, XLSM เป็นต้น), Microsoft Excel Binary File Format (XLS, XLT), OpenDocument Spreadsheet format (ODS, FODS, OTS), รูปแบบที่อิงข้อความโดยใช้ตัวคั่นแบ่ง (CSV, TSV ฯลฯ) และอื่น ๆ ทั้งหมดนี้รวมเป็นสิ่งที่เรียกว่า ตระกูลรูปแบบสเปรดชีต GroupDocs.Viewer รองรับรูปแบบสเปรดชีตเกือบทั้งหมดในการนำเข้าและสามารถเรนเดอร์ (แปลง) เป็น HTML, PDF, PNG และ JPEG บทความนี้อธิบายวิธีทำและตัวเลือกที่มีอยู่ รวมถึงเมื่อใดและทำไมจึงควรใช้

การแสดงผลเวิร์กบุ๊กที่เปิดใน MS Excel ให้เป็นรูปแบบ HTML

การใช้งานพื้นฐาน

ก่อนอื่นเราต้องพูดถึงตัวเลือก มีคลาสแยกต่างหากใน API สาธารณะ: SpreadsheetOptions ใน GroupDocs.Viewer.Options. คลาสนี้ออกแบบมาสำหรับการปรับการเรนเดอร์ของตระกูลรูปแบบสเปรดชีต สามารถเข้าถึงได้สำหรับตัวเลือกการดูสี่แบบผ่านคุณสมบัติ SpreadsheetOptions ดังนี้

เมื่อไม่ได้กำหนดโดยชัดเจน คุณสมบัติ SpreadsheetOptions จะมีค่าเริ่มต้นโดยนัยเป็นอินสแตนซ์ของคลาส SpreadsheetOptions ซึ่งจะอธิบายต่อในบทความนี้

โดยสังเขป การเรนเดอร์เอกสารสเปรดชีตด้วย GroupDocs.Viewer นั้นง่ายมากและคล้ายกับรูปแบบอื่น ๆ — สร้างอินสแตนซ์ของ ViewOptions, สร้างอินสแตนซ์ของ Viewer พร้อมระบุไฟล์สเปรดชีตต้นทาง, แล้วเรียกเมธอด Viewer.View(viewOptions) ตัวอย่างโค้ดต่อไปนี้แสดงการเรนเดอร์ไฟล์สเปรดชีตเดียวเป็นสี่รูปแบบผลลัพธ์: HTML, PDF, PNG และ JPEG โปรดทราบว่า นอกจากการสร้างอินสแตนซ์ของคลาสตัวเลือกแล้ว ไม่ได้ทำการปรับแต่งใด ๆ เกี่ยวกับสเปรดชีต ดังนั้นตัวเลือกสเปรดชีตทั้งหมดจะใช้ค่าเริ่มต้น

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

HtmlViewOptions htmlOptions = HtmlViewOptions.ForEmbeddedResources("worksheet_{0}.html");
PdfViewOptions pdfOptions = new PdfViewOptions("Output_spreadsheet.pdf");
PngViewOptions pngOptions = new PngViewOptions("worksheet_{0}.png");
JpgViewOptions jpegOptions = new JpgViewOptions("worksheet_{0}.jpeg");

using (Viewer viewer = new Viewer("spreadsheet.xlsx"))
{
    viewer.View(htmlOptions);
    viewer.View(pdfOptions);
    viewer.View(pngOptions);
    viewer.View(jpegOptions);
}

ตอนนี้มาพูดถึง แผ่นงาน ทุกสเปรดชีตจะมีอย่างน้อยหนึ่งแผ่นงาน ในซอฟต์แวร์ประมวลผลตารางส่วนใหญ่เช่น Microsoft Excel แผ่นงานจะแสดงเป็น แท็บ รูปแบบสเปรดชีตบางประเภทอาจมีเพียงแผ่นงานเดียว เช่น รูปแบบที่อิงข้อความและใช้ตัวคั่น (เช่น CSV, TSV ฯลฯ)

โดยค่าเริ่มต้น GroupDocs.Viewer จะเรนเดอร์ทุกแผ่นงานในสเปรดชีตที่ระบุ แต่สามารถเปลี่ยนแปลงได้ เมธอด Viewer.View() มีโอเวอร์โหลดที่รับชุดหมายเลขหน้าเป็นพารามิเตอร์ที่ 2 — Int32[] pageNumbers เมื่อใช้พารามิเตอร์นี้ จะเรนเดอร์เฉพาะหน้าเหล่านั้น พารามิเตอร์นี้เป็นสากลและใช้ได้กับรูปแบบที่รองรับการแบ่งหน้า ทั้งหมด แต่ในบริบทของตระกูลรูปแบบสเปรดชีตมันหมายถึงหมายเลขแผ่นงานที่ต้องการดู

โปรดสังเกตว่าการนับหน้าโดยทั่วไปและการนับแผ่นงานโดยเฉพาะเป็นแบบ 1‑based ไม่ใช่ 0‑based ดังนั้นจึงเริ่มจาก “1” ไม่ใช่ “0”

ตัวอย่างต่อไปนี้แสดงการเรนเดอร์แผ่นงานที่ 1 และ 3 เป็น PNG ในสเปรดชีตที่มี 3 แผ่นงาน

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

PngViewOptions pngOptions = new PngViewOptions("worksheet_{0}.png");
using (Viewer viewer = new Viewer("spreadsheet.xlsx"))
{
    viewer.View(pngOptions, 1, 3);
}

การแยกแผ่นงานเป็นหน้า

GroupDocs.Viewer เรนเดอร์เอกสารเป็นหน้า โดยที่ “หน้า” เราเข้าใจว่าเป็นบริเวณสี่เหลี่ยมที่มีขนาดค่อนข้างเล็ก เทียบกับหน้าจอหรือกระดาษ A4 ในทางตรงกันข้าม แผ่นงานอาจมีขนาดใหญ่มาก ตัวอย่างเช่น รูปแบบ XLS ที่ล้าสมัยรองรับ สูงสุด 256 คอลัมน์และ 65 536 แถว ในขณะที่รูปแบบใหม่กว่า XLSX (Office Open XML Workbook) และ Microsoft Excel รองรับ สูงสุด 16 384 คอลัมน์และ 1 048 576 แถว การ “ทำให้แผ่นงานพอดี” ลงในหน้าเป็นส่วนสำคัญของการเรนเดอร์สเปรดชีตด้วย GroupDocs.Viewer เพื่อให้แผ่นงานพอดีกับหน้า (หรือหลายหน้า) GroupDocs.Viewer ทำการ แยกแผ่นงาน — แผ่นงานจะถูกแบ่งเป็นส่วนสี่เหลี่ยมหลายส่วน และแต่ละส่วนจะวางบนหน้าแยกต่างหาก มีวิธีแยก 5 แบบ ที่อธิบายด้านล่าง

สิ่งสำคัญ — วิธีการแยกทั้งหมดนี้กำหนดโดยวิธีคงที่ (factory method) ที่สร้างอินสแตนซ์ของคลาส SpreadsheetOptions

เรนเดอร์แผ่นงานทั้งหมดบนหน้าเดียว

SpreadsheetOptions.ForOnePagePerSheet()

วิธีที่ง่ายที่สุด — ปิดการแยกและปรับขนาดหน้าตามให้พอดีกับเนื้อหาทั้งหมดของแผ่นงานทั้งหมด นี่เป็นทางเลือกที่ดีเมื่อทราบแล้วว่าแผ่นงานมีขนาดเล็ก อย่างไรก็ตาม หากแผ่นงานใหญ่จริง ๆ วิธีนี้อาจทำให้ได้ผลลัพธ์แย่ ๆ โดยเฉพาะเมื่อต้องแปลงเป็น HTML เอกสาร HTML ที่ได้อาจมีขนาดหลายสิบหรือหลายร้อย MiB ซึ่งอาจทำให้เบราว์เซอร์ทำงานช้า หรือเมื่อต้องแปลงเป็น JPEG ความกว้างหรือความสูงอาจเกินขีด จำกัด สูงสุดที่ 65 535 พิกเซล ดังนั้นควรใช้โหมดนี้อย่างระมัดระวัง

เรนเดอร์แผ่นงานบนหน้าเดียว

แยกแผ่นงานตามการแบ่งหน้า

SpreadsheetOptions.ForRenderingByPageBreaks()

Microsoft Excel เองจะใส่การแบ่งหน้าอัตโนมัติตามขนาดกระดาษและการตั้งค่าหน้า เช่น การวางแนวและระยะขอบ หากคุณสลับไปที่แท็บ “View” แล้วเลือกโหมด “Page Break Preview” จะเห็นเส้นสีฟ้าที่แบ่งพื้นที่แผ่นงานเป็นส่วนสี่เหลี่ยม ๆ แต่ละส่วนจะมีป้าย “Page 1”, “Page 2” ฯลฯ นี่คือวิธีที่ Excel “แนะนำ” ให้แยกแผ่นงานเป็นหน้า

ด้วยวิธีนี้ GroupDocs.Viewer จะทำตาม Excel และแยกแผ่นงานตามการแบ่งหน้าเช่นเดียวกัน

ควรระบุว่าตัวเลือกนี้ — การแยกแผ่นงานตามการแบ่งหน้า — เป็นตัวเลือกเริ่มต้นของคุณสมบัติ BaseViewOptions.SpreadsheetOptions ดังนั้นเมื่อคุณสร้างอินสแตนซ์ของคลาสตัวเลือกการดู ตัวเลือก [ForRenderingByPageBreaks()] จะถูกเลือกโดยอัตโนมัติ

เรนเดอร์เฉพาะพื้นที่พิมพ์

SpreadsheetOptions.ForRenderingPrintArea()

นอกจากการแบ่งหน้าแล้ว Excel ยังมีแนวคิด “พื้นที่พิมพ์” (Print Area) ซึ่งคือช่วงเซลล์หนึ่งหรือหลายช่วงที่กำหนดให้พิมพ์ ส่วนใดที่อยู่นอกพื้นที่พิมพ์จะไม่ถูกพิมพ์เลย การเพิ่มช่วงเซลล์ไปยังพื้นที่พิมพ์ ให้ไปที่แท็บ “Page Layout” คลิกปุ่ม “Print Area” แล้วเลือก “Set Print Area” (ดูภาพด้านล่าง) หากต้องการเพิ่มช่วงอื่น ให้เลือกช่วงใหม่ คลิก “Print Area” แล้วเลือก “Add to Print Area” ในโหมด “Page Break Preview” จะเห็นทุกช่วงที่อยู่ในพื้นที่พิมพ์

เรนเดอร์เฉพาะพื้นที่พิมพ์

เรนเดอร์พื้นที่พิมพ์และแยกตามการแบ่งหน้า

SpreadsheetOptions.ForRenderingPrintAreaAndPageBreaks()

GroupDocs.Viewer มีฟีเจอร์พิเศษ — การรวม “พื้นที่พิมพ์” กับ “การแบ่งหน้า” ในโหมดเดียว ในกรณีนี้ GroupDocs.Viewer จะพิจารณาทั้งช่วงเซลล์ของพื้นที่พิมพ์และการแบ่งหน้าในแผ่นงานพร้อมกันเพื่อแบ่งแผ่นงานเป็นหน้า

ในภาพต่อไปนี้ เส้นสีแดงแสดงพื้นที่พิมพ์ ส่วนเส้นสีฟ้าแสดงการแบ่งหน้า

เรนเดอร์พื้นที่พิมพ์และแยกตามการแบ่งหน้า

แยกแผ่นงานเป็นหน้าโดยกำหนดแถวและคอลัมน์ด้วยตนเอง

SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage)
SpreadsheetOptions.ForSplitSheetIntoPages(int countRowsPerPage, int countColumnsPerPage)

บางครั้งไม่มีวิธีแยกใด ๆ ที่อธิบายไว้ข้างต้นถือว่าเหมาะสม หรือสเปรดชีตมีรูปแบบที่ไม่รองรับการแบ่งหน้าและพื้นที่พิมพ์ เช่น CSV ในกรณีเหล่านี้ GroupDocs.Viewer ให้คุณกำหนดจำนวนแถวและ/หรือคอลัมน์ที่ต้องการแสดงในแต่ละหน้าเอง สรุปแล้ว ความแตกต่างระหว่างการแยกตามแถวเท่านั้นกับการแยกตามแถวและคอลัมน์จะแสดงในภาพด้านล่าง

หากใช้โอเวอร์โหลดแรกของเมธอด ForSplitSheetIntoPages (พารามิเตอร์เดียว) จะเปิดการแยกตาม แถวเท่านั้น หากใช้โอเวอร์โหลดที่สอง (พารามิเตอร์สองตัว) จะเปิดการแยกตาม แถวและคอลัมน์

แยกแผ่นงานเป็นหน้าโดยกำหนดแถวและคอลัมน์ด้วยตนเอง

การปรับตัวเลือกเพิ่มเติม

สิ่งที่อธิบายมาข้างต้นเป็นพื้นฐานและเพียงพอสำหรับการเรนเดอร์สเปรดชีตด้วย GroupDocs.Viewer อย่างไรก็ตาม ยังมีตัวเลือกเพิ่มเติมหลายอย่างที่ไม่บังคับแต่ช่วยให้ผู้ใช้ปรับผลการเรนเดอร์ได้ละเอียดยิ่งขึ้น

บางตัวเลือกเป็นคุณสมบัติของคลาส SpreadsheetOptions ซึ่งเข้าถึงได้ผ่านคุณสมบัติ SpreadsheetOptions ของคลาสตัวเลือกการดู ส่วนอื่น ๆ อยู่ในคลาสเชิงนามธรรม ViewOptions ที่ใช้ร่วมกันสำหรับโหมดการเรนเดอร์ทั้ง 4 แบบ

เรนเดอร์หัวแถวและหัวคอลัมน์

เมื่อ MS Excel หรือโปรแกรมประมวลผลตารางคล้าย ๆ กันเปิดเอกสารสเปรดชีต จะมีการแสดงหัวคอลัมน์และหัวแถว (คอลัมน์เป็นอักษร A, B, C, AA, AB … และแถวเป็นตัวเลข 1, 2, 3 …) โดยค่าเริ่มต้น GroupDocs.Viewer ไม่แสดงหัวเหล่านี้เพราะถือเป็นส่วนของอินเตอร์เฟซโปรแกรม ไม่ใช่ส่วนของเอกสารเอง แต่สามารถเปลี่ยนได้โดยใช้คุณสมบัติ RenderHeadings ซึ่งเป็นประเภทบูลีน ค่าเริ่มต้นคือ false หากตั้งเป็น true จะทำให้หัวแถวและหัวคอลัมน์ปรากฏในไฟล์ผลลัพธ์ ตามตัวอย่างในภาพด้านล่าง

เรนเดอร์หัวแถวและหัวคอลัมน์

เรนเดอร์เส้นกริดของแผ่นงาน

แนวคิดของตัวเลือกนี้คล้ายกับข้อก่อนหน้า โดยค่าเริ่มต้น GroupDocs.Viewer ไม่แสดงเส้นกริดระหว่างเซลล์ เพราะเส้นกริดไม่ใช่ส่วนของสเปรดชีตเอง แต่เป็นวิธีการแสดงตารางของโปรแกรมประมวลผลตาราง อย่างไรก็ตาม หากตั้งค่า RenderGridLines เป็น true เส้นกริดจะปรากฏในไฟล์ผลลัพธ์ ตามภาพด้านล่าง

เรนเดอร์เส้นกริดของแผ่นงาน

ควบคุมการไหลของข้อความในเซลล์

เป็นสถานการณ์ที่พบบ่อยเมื่อข้อความยาวเกินขอบเขตของเซลล์ จะจัดการอย่างไร? GroupDocs.Viewer มีคุณสมบัติพิเศษ SpreadsheetOptions.TextOverflowMode เพื่อแก้ปัญหานี้ คุณสมบัตินี้เป็น enum ชื่อเดียวกัน มี 4 ค่า ดังต่อไปนี้

OverlayIfNextIsEmpty

ค่าเริ่มต้นของ SpreadsheetOptions.TextOverflowMode คือ OverlayIfNextIsEmpty ซึ่งเลียนแบบพฤติกรรมเริ่มต้นของ Microsoft Excel ค่าดังกล่าวทำให้ข้อความสามารถไหลไปยังเซลล์ใกล้เคียงได้เฉพาะเมื่อเซลล์นั้นว่างเปล่า หากเซลล์ใกล้เคียงมีข้อมูลอยู่ ข้อความจะถูกตัด

ค่า enum OverlayIfNextIsEmpty

ภาพด้านบนเป็นไฟล์ HTML ที่เรนเดรจากไฟล์ XLSX โดยใช้ค่า OverlayIfNextIsEmpty โปรดสังเกตเซลล์ “B2” มีข้อความยาวและถูกตัดเพราะเซลล์ “C2” ไม่ว่างเปล่า ส่วนเซลล์ “C3” มีข้อความยาวที่ไหลไปยัง “D2” และ “E2” เนื่องจากเซลล์เหล่านั้นว่าง

Overlay

ค่า TextOverflowMode.Overlay มีลักษณะคล้ายกับค่าเดิมแต่ทำงาน aggressive มากกว่า: ข้อความยาวที่เกินขอบเขตเซลล์เดิมจะไหลลงไปเซลล์ใกล้เคียงเสมอ ไม่ว่าเซลล์นั้นจะมีข้อมูลหรือไม่ ข้อมูลเดิมจะถูกลบ

ค่า enum Overlay

ภาพด้านบนแสดงตัวอย่างข้อความจากเซลล์ “B2” ไหลไปยัง “C2”, “D2”, “E2”, “F2” ทำให้ข้อความเดิมของ “C2” และ “F2” ถูกลบ

HideText

โหมด TextOverflowMode.HideText ทำงานตรงกันข้ามกับ Overlay — แทนที่จะแสดงแบบไหลข้อความจะถูกตัดโดยตรง ไม่ว่าจะมีพื้นที่ว่างในเซลล์ข้างเคียงหรือไม่ก็ตาม

ค่า enum HideText

ในภาพด้านบนเซลล์ “C3” แม้ว่าจะมีพื้นที่ว่างใน “D3” เป็นต้น ข้อความก็ยังถูกตัดโดยไม่มีเงื่อนไข

AutoFitColumn

ค่า TextOverflowMode.AutoFitColumn จัดการโดยเพิ่มความกว้างคอลัมน์ให้พอดีกับข้อความของเซลล์นั้น ไม่ว่าจะยาวแค่ไหน คอลัมน์ที่เซลล์นั้นอยู่จะขยายความกว้างให้พอรับข้อความทั้งหมด

ค่า enum AutoFitColumn

ภาพด้านบนแสดงผลการทำงาน อย่างไรก็ตาม วิธีนี้อาจไม่เหมาะในบางกรณี โดยเฉพาะเมื่อข้อความยาวเกินไป ทำให้หน้าแสดงกว้างเกินไปและต้องเลื่อนแนวนอน

เรนเดอร์แถวและคอลัมน์ที่ซ่อนอยู่

Microsoft Excel และโปรแกรมประมวลผลตารางอื่น ๆ อนุญาตให้ซ่อนแถวหรือคอลัมน์บางส่วน โดยค่าเริ่มต้น GroupDocs.Viewer ไม่เรนเดอร์แถว/คอลัมน์ที่ซ่อนอยู่ แต่สามารถเปลี่ยนได้โดยตั้งค่า ViewOptions.SpreadsheetOptions.RenderHiddenRows และ ViewOptions.SpreadsheetOptions.RenderHiddenColumns ให้เป็น true

เรนเดอร์แผ่นงานที่ซ่อนอยู่

เช่นเดียวกับแถว/คอลัมน์ที่ซ่อนอยู่ ไฟล์สเปรดชีตอาจมีแผ่นงานที่ซ่อนอยู่ และโดยค่าเริ่มต้น GroupDocs.Viewer จะไม่เรนเดอร์แผ่นงานเหล่านั้น สามารถเปิดได้โดยตั้งค่า RenderHiddenPages เป็น true ต้องบอกว่าคุณสมบัตินี้ไม่ได้อยู่ใน SpreadsheetOptions แต่เป็นส่วนของคลาสเชิงนามธรรม BaseViewOptions

ข้ามแถวและคอลัมน์ที่ว่างเปล่า

บางสเปรดชีตมี “ช่องว่าง” อยู่มากเกินไป ซึ่งอาจทำให้ไฟล์ใหญ่เกินไป GroupDocs.Viewer มีคุณสมบัติให้ข้ามการเรนเดอร์แถว/คอลัมน์ที่ว่างเปล่า หากเปิดใช้งาน จะไม่รวมแถว/คอลัมน์ที่ว่างเปล่าในผลลัพธ์ HTML, PDF, PNG หรือ JPEG คุณสมบัติบูลีนที่รับผิดชอบคือ SpreadsheetOptions.SkipEmptyRows และ SpreadsheetOptions.SkipEmptyColumns

ข้ามแถวและคอลัมน์ที่ว่างเปล่า

ภาพด้านบนแสดงว่า SkipEmptyRows และ SkipEmptyColumns ถูกเปิดใช้งาน

เรนเดอร์หรือซ่อนความคิดเห็นของเซลล์

เซลล์ในสเปรดชีตอาจมีความคิดเห็น และโดยค่าเริ่มต้น GroupDocs.Viewer จะเรนเดอร์ทั้งหมด แต่สามารถปิดได้โดยตั้งค่า BaseViewOptions.RemoveComments เป็น true (คุณสมบัตินี้อยู่ในคลาส BaseViewOptions ไม่ใช่ SpreadsheetOptions)

เรนเดอร์หรือซ่อนความคิดเห็นของเซลล์

ภาพด้านบนแสดงการเรนเดอร์ไฟล์ XLSX ที่มีความคิดเห็นของเซลล์เป็น PNG ด้วยค่าตั้งต้น — ความคิดเห็นของเซลล์ “E2” ปรากฏในไฟล์ PNG

ตั้งค่าขอบกระดาษของแผ่นงานในหน้า PDF ผลลัพธ์

เมื่อเรนเดอร์แผ่นงานเป็น PDF สามารถควบคุมระยะขอบกระดาษ (margin) — ระยะจากขอบหน้ากระดาษถึงเนื้อหา มี 4 คุณสมบัติสำหรับขอบบน, ขวา, ล่าง, ซ้าย

โดยค่าเริ่มต้น 4 คุณสมบัตินี้มีค่าเป็นลบ ซึ่งหมายความว่า GroupDocs.Viewer จะใช้ค่าขอบกระดาษเริ่มต้น อย่างไรก็ตาม สามารถกำหนดค่าเหล่านี้ได้โดยตรง ต้องเน้นว่าขอบกระดาษจะมีผลเฉพาะเมื่อรูปแบบเป้าหมายคือ PDF

โค้ดตัวอย่างต่อไปนี้สร้าง PdfViewOptions, ตั้งค่าขอบกระดาษทั้ง 4 ด้าน แล้วเรนเดอร์เอกสาร

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

PdfViewOptions pdfViewOptions = new PdfViewOptions("Output.pdf");
pdfViewOptions.SpreadsheetOptions = SpreadsheetOptions.ForOnePagePerSheet();
pdfViewOptions.SpreadsheetOptions.TopMargin = 2;
pdfViewOptions.SpreadsheetOptions.BottomMargin = 4;
pdfViewOptions.SpreadsheetOptions.LeftMargin = 8;
pdfViewOptions.SpreadsheetOptions.RightMargin = 0;

using (var viewer = new Viewer("spreadsheet.xlsx"))
{
    viewer.View(pdfViewOptions);
}

ภาพต่อไปนี้แสดงผลลัพธ์

ตั้งค่าขอบกระดาษของแผ่นงานในหน้า PDF ผลลัพธ์

สรุป

รูปแบบสเปรดชีตค่อนข้างซับซ้อนและเอกสารอาจมีเนื้อหาที่แตกต่างกันในด้านประเภทและความยาว ในหลายกรณีจึงไม่สามารถเรนเดอร์สเปรดชีตที่ซับซ้อนเป็นรูปแบบอื่นด้วยตัวเลือกเริ่มต้นได้ จึงเป็นเหตุผลที่ GroupDocs.Viewer มีชุดคุณสมบัติมากมาย; ด้วยพวกมันผู้ใช้ทุกคนจะสามารถปรับการเรนเดอร์ให้ตรงกับความต้องการของตนได้

ดูเพิ่มเติม

ดาวน์โหลดเวอร์ชันทดลองฟรี

คุณสามารถดาวน์โหลดเวอร์ชันทดลองฟรีของ GroupDocs.Viewer สำหรับ .NET ได้จาก releases.groupdocs.com. คุณสามารถรับไลเซนส์ชั่วคราวเพื่อทดลองใช้ทุกฟีเจอร์และความสามารถโดยไม่มีข้อจำกัดได้จาก ที่นี่.