using System; using System.Collections.Generic; using iTextSharp.text.pdf; using PDFPatcher.Model; namespace PDFPatcher.Processor { sealed class RemoveWrappedCommandProcessor : IPageProcessor { int _processedPageCount; private readonly int _RemoveLeading, _RemoveTrailing; public RemoveWrappedCommandProcessor(int removeLeadingCommandCount, int removeTrailingCommandCount) { _RemoveLeading = removeLeadingCommandCount; _RemoveTrailing = removeTrailingCommandCount; } #region IPageProcessor 成员 public string Name => "删除页面起始或结束指令"; public void BeginProcess(DocProcessorContext context) { _processedPageCount = 0; } public bool EndProcess(PdfReader pdf) { Tracker.TraceMessage(Tracker.Category.Notice, Name + "功能:"); Tracker.TraceMessage("  删除了 " + _processedPageCount + " 页的指令。"); return false; } public int EstimateWorkload(PdfReader pdf) { return pdf.NumberOfPages * 3; } public bool Process(PageProcessorContext context) { Tracker.IncrementProgress(3); var p = context.PageCommands; var r = ProcessCommands(p.Commands); if (r) { context.IsPageContentModified = true; _processedPageCount++; } return r; } #endregion bool ProcessCommands(IList parent) { var r = false; if (_RemoveLeading > 0) { for (int i = _RemoveLeading - 1; i >= 0 && parent.Count > 0; i--) { parent.RemoveAt(i); } r = true; } if (_RemoveTrailing > 0) { for (int i = _RemoveTrailing - 1; i >= 0 && parent.Count > 0; i--) { parent.RemoveAt(parent.Count - 1); } r = true; } return r; } } }