Пакет синтаксического анализа iText [Sharp] еще не обрабатывает команды lineTo или curveTo.Это цель, но не настолько важная, чтобы ее реализовать.Другие вещи привлекают внимание в данный момент.
Если вы чувствуете себя предприимчивым, вы должны проверить PdfContentStreamProcessor.В закрытой функции populateOperators
есть длинный список команд, которые в настоящее время обрабатываются (тем или иным способом).
Вам необходимо написать одинаковые классы команд для всех команд штриховой графики (moveTo,lineTo, rect, обводить, заполнить, обрезать) и представить их каким-либо образом.
На самом деле, если все, что вы хотите сделать, это СЧИТЫВАТЬ количество путей, вы можете просто реализовать обводку и заполнение, чтобы увеличить статические значения.целое число [s], затем проверьте их после разбора.Должно быть довольно просто (я пишу на Java, но это достаточно легко перевести):
private static class CountOps implements ContentOperator {
public static int operationCount = 0;
public void invoke(PdfContentStreamProcessor processor, PdfLiteral operator, ArrayList<PdfObject> operands) {
++operationCount;
}
}
Ах!registerContentOperator
является публичной функцией.Вам вообще не нужно менять источник iText:
PdfContentStreamProcessor proc = new PdfContentStreamProcessor(null);
CountOps counter = new CountOps();
proc.registerContentOperator("S", countOps); // stroke the path
proc.registerContentOperator("s", countOps); // close & stroke
proc.registerContentOperator("F", countOps); // fill, backward compat
proc.registerContentOperator("f", countOps); // fill
proc.registerContentOperator("f*", countOps); // fill with event-odd winding rule
proc.registerContentOperator("B", countOps); // fill & stroke
proc.registerContentOperator("B*", countOps); // fill & stroke with even-odd
proc.registerContentOperator("b", countOps); // close, fill, & stroke
proc.registerContentOperator("b*", countOps); // close, fill, & stroke with even-odd
proc.processContent( contentBytes, pageResourceDict );
int totalStrokesAndFills = CountOps.operationCount; // note that stroke&fill operators will be counted once, not twice.
Что-то в этом роде.Только нулевой RenderListener вызовет исключение нулевого указателя, если вы столкнетесь с любым текстом или изображениями.Вы можете сами запустить прослушиватель, который не работает, или использовать один из существующих и игнорировать его вывод.
PS: iTextSharp 5.0.6 должен быть выпущен в любой день, если он еще не вышел.