Redaction
Redaction
หน้านี้ครอบคลุมการลบเนื้อหาออกจากหน้าของ PDF อย่างถาวร. Aspose.PDF FOSS สำหรับ TypeScript มี workflow การลบข้อมูลสองแบบ: กระบวนการสองขั้นตอน marking แล้ว apply ที่คุณสามารถตรวจสอบก่อนทำการคอมมิท, และกระบวนการหนึ่งขั้นตอนที่ทำทันที. ทั้งสองสามารถใช้ได้บน Page สำหรับหน้าเดียวและบน Document สำหรับเอกสารทั้งหมด.
การทำเครื่องหมายและการประยุกต์การลบข้อมูล
Page.AddRedact() ทำเครื่องหมายพื้นที่สี่เหลี่ยมด้วยคำอธิบาย /Redact — เนื้อหาที่อยู่ด้านล่างยังคงไม่ถูกแก้ไขและยังสามารถคัดลอกได้. ไม่มีอะไรถูกลบจริงจนกว่า Page.ApplyRedactions() จะทำงาน: มันจะเขียนทับสตรีมเนื้อหาอย่างทำลายสำหรับแต่ละเครื่องหมาย /Redact บนหน้า, วาด overlay ของแต่ละเครื่องหมาย (การเติม /IC และ /OverlayText), ลบเครื่องหมายเหล่านั้น, และคืนค่าจำนวนการลบข้อมูลที่ได้ทำ. เครื่องหมายที่เพิ่มหลังจากเรียก ApplyRedactions() จะยังคงอยู่โดยไม่ได้ประยุกต์.
page.AddRedact({
rect: [220, 550, 460, 566],
fill: [0, 0, 0],
overlayText: '[REDACTED]',
align: 'center',
fontSize: 9,
textColor: [1, 1, 1],
});
const applied = page.ApplyRedactions();
console.log('Redactions applied:', applied);การลบข้อมูลทันที
Page.Redact() และ Page.RedactText() รวมการทำเครื่องหมายและการประยุกต์ไว้ในคำสั่งเดียว: พวกเขาลบข้อความและรูปภาพที่ถูกปกคลุมอย่างแท้จริง, กำจัดทรัพยากรที่เหลือโดยไม่มีการเชื่อมต่อ, และวาดกล่องเครื่องหมายทึบสีเหนือแต่ละพื้นที่ — โดยไม่มีขั้นตอน ApplyRedactions() แยกจากกันและไม่มีอะไรต้องตรวจสอบก่อน. Page.Redact() รับรายการที่ระบุอย่างชัดเจนของพื้นที่ Rect; Page.RedactText() ค้นหาและลบทุกตำแหน่งของสตริงค้นหาหรือ RegExp, เช่นเดียวกับการค้นหาโดย Page.SearchAnnotationText(). ทั้งสองรับอ็อบเจ็กต์ RedactOptions ที่ควบคุม color ของเครื่องหมาย, ว่าจะ scrubMetadata หรือไม่, และว่าจะ keepAnnotations ที่ทับซ้อนกับพื้นที่ที่ถูกลบ.
เนื่องจากพวกเขาลบเนื้อหาโดยทันทีโดยไม่มีขั้นตอนการตรวจสอบ, ให้เลือกใช้ AddRedact() + ApplyRedactions() เมื่อเครื่องหมายควรตรวจสอบได้ก่อนที่จะคอมมิท, และใช้ Redact() / RedactText() เมื่อพื้นที่หรือคำค้นหาได้รับการยืนยันว่าปลอดภัยต่อการลบแล้ว.
การลบข้อมูลในเอกสารทั้งหมด
เวิร์กโฟลว์สองแบบเดียวกันมีอยู่บน Document โดยกำหนดขอบเขตให้กับทุกหน้าในครั้งเดียว: Document.MarkRedactText() ทำเครื่องหมายทุกการปรากฏของคำค้นหาทั่วทุกหน้า, Document.ApplyRedactions() ใช้ทุกเครื่องหมายในเอกสาร, และ Document.Redact() / Document.RedactText() ทำการลบข้อมูลในพื้นที่ของหน้าเดียวหรือคำค้นหาทั่วเอกสารโดยทันที, สะท้อนกับเทียบเท่า Page ของพวกมัน.
เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- ใช้
AddRedact()+ApplyRedactions()เมื่อการลบข้อมูลควรตรวจสอบได้ก่อนที่จะมีผล; ใช้Redact()/RedactText()เมื่อพื้นที่เหล่านั้นได้รับการยืนยันว่าปลอดภัยและสามารถลบได้ทันที. - เพิ่มเครื่องหมาย
AddRedact()ทั้งหมดสำหรับหน้าให้เรียบร้อยก่อนเรียกใช้ApplyRedactions()— เครื่องหมายที่เพิ่มภายหลังจะไม่รวมอยู่ในการเรียกนั้นและจะไม่ถูกใช้. - ส่ง
scrubMetadata: trueในRedactOptions/ApplyRedactionsOptionsเมื่อเนื้อหาที่ลบอาจปรากฏในเมตาดาต้าเอกสาร (/Infoหรือ XMP). RedactText()และMarkRedactText()ค้นหาด้วยกฎการจับคู่เดียวกับSearchAnnotationText()/Search, ดังนั้นสตริงการค้นหาที่ไม่ตรงที่นั่นจะไม่สามารถลบข้อมูลได้เช่นกัน.
ปัญหาที่พบบ่อย
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
| เครื่องหมายการลบไม่มีผล | Page.ApplyRedactions() ไม่เคยถูกเรียกใช้ | เรียก Page.AddRedact() สำหรับทุกเครื่องหมายก่อน, แล้ว Page.ApplyRedactions() ครั้งเดียว |
| เนื้อหายังคงกู้คืนได้หลังจากทำเครื่องหมาย | เครื่องหมายใช้ AddRedact() (mark-only) โดยไม่มีการเรียก ApplyRedactions() ต่อมา | เรียก ApplyRedactions() หรือใช้ Redact() / RedactText() เพื่อการลบแบบเรียกครั้งเดียว |
| ข้อความที่ลบออกปรากฏขึ้นใหม่ในเมตาดาต้าเอกสารที่สกัดออก | scrubMetadata ไม่ได้ถูกตั้งค่า | ส่งค่า { scrubMetadata: true } ในอ็อบเจ็กต์ options |
ApplyRedactions() คืนค่า 0 | ไม่มีเครื่องหมาย /Redact อยู่บนหน้าเมื่อมีการเรียก | ยืนยันว่า AddRedact() (หรือ MarkRedactText()) ทำงานก่อนและกำหนดเป้าหมายที่หน้าเดียวกัน |
FAQ
ความแตกต่างระหว่าง AddRedact กับ Redact คืออะไร?
AddRedact() เพียงทำเครื่องหมายพื้นที่ — เนื้อหายังคงอยู่และสามารถคัดลอกได้จนกว่า ApplyRedactions() จะทำงาน Redact() จะลบเนื้อหาในคำสั่งเดียวกันโดยไม่มีขั้นตอนการใช้แยกต่างหาก.
ฉันสามารถทำการลบข้อมูลโดยการค้นหาข้อความแทนการระบุตำแหน่งได้หรือไม่?
ใช่ RedactText() ค้นหาและลบข้อมูลทุกตำแหน่งที่พบของสตริงค้นหา หรือ RegExp ทันที; MarkRedactText() ทำเช่นเดียวกันแต่เพียงทำเครื่องหมายการจับคู่ไว้ เท่าที่จะใช้ในภายหลังด้วยคำสั่ง ApplyRedactions().
การลบข้อมูลทำงานทั่วทั้งเอกสารหรือเฉพาะหนึ่งหน้าในแต่ละครั้ง?
ทั้งสองอย่าง Page.Redact() / Page.ApplyRedactions() และพี่น้องของมันทำงานบนหนึ่งหน้า; Document.Redact() / Document.ApplyRedactions() และพี่น้องของมันทำงานทั่วทุกหน้า.
คำอธิบายที่อยู่ใกล้พื้นที่ที่ลบข้อมูลจะถูกลบด้วยหรือไม่?
เฉพาะเมื่อคุณปล่อยให้พวกมันเป็นเช่นนั้น ส่ง keepAnnotations: true ในอ็อบเจกต์ options เพื่อรักษา annotation ที่ทับกับส่วนที่ถูกทำให้เป็นลบ แทนที่จะลบออกพร้อมกับมัน.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
Page.AddRedact() | ทำเครื่องหมายพื้นที่สี่เหลี่ยมด้วยคำอธิบาย /Redact โดยยังไม่ได้ลบเนื้อหา |
Page.ApplyRedactions() | ลบทุกพื้นที่ที่ทำเครื่องหมายบนหน้าอย่างถาวรและคืนค่าจำนวนที่ได้ทำการลบ |
Page.Redact() | ลบเนื้อหาในพื้นที่ที่กำหนดโดยทันทีโดยไม่มีขั้นตอนการใช้แยก |
Page.RedactText() | ค้นหาและทำการลบข้อมูลทันทีทุกกรณีที่พบสตริงการค้นหาหรือ RegExp |
Page.MarkRedactText() | ค้นหาและทำเครื่องหมาย (โดยไม่ทำการประยุกต์) ทุกการปรากฏของสตริงการค้นหาหรือ RegExp |
Document.ApplyRedactions() | ประยุกต์เครื่องหมาย /Redact ทุกอันทั่วทั้งเอกสาร |
Document.Redact() / Document.RedactText() | ทำการบังข้อมูลส่วนที่ต้องการโดยทันทีในหน้าเดียว หรือคำค้นหาทั่วทุกหน้า |
Document.MarkRedactText() | ทำเครื่องหมายทุกการปรากฏของคำค้นหาทั่วทุกหน้า |