Files
PDFPatcher/App/Processor/ContentProcessors/RemoveWrappedCommandProcessor.cs
T
2024-10-07 16:17:27 +08:00

66 lines
1.6 KiB
C#
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<PdfPageCommand> parent) {
var r = false;
if (_RemoveLeading > 0) {
for (int i = Math.Min(_RemoveLeading, parent.Count) - 1; i >= 0; i--) {
parent.RemoveAt(i);
}
r = true;
}
if (_RemoveTrailing > 0) {
for (int i = Math.Min(_RemoveTrailing, parent.Count); i > 0; i--) {
parent.RemoveAt(parent.Count - 1);
}
r = true;
}
return r;
}
}
}