Estrai percorsi e forms con iTextSharp

iTextSharp supporta la creazione di forms e percorsi con la class PdfContentByte , lì puoi impostare colors, curve di pittura ed elementi di base … c’è un meccanismo che fa il contrario? Sono in grado di ottenere contenuti chiamando PdfReader.GetPageContent(...) ma non ho trovato un “parser” per leggere queste operazioni, applicarle al contesto grafico e ad esempio dipingerle su un pannello.

Esempio:

 1 1 1 RG 1 1 1 rg 0.12 0 0 0.12 16 31 cm q 480 421 m 4318 421 l 4318 5459 l 480 5459 l 480 421 l W n 0.074509806931 0.074509806931 0.074509806931 RG 0.074509806931 0.074509806931 0.074509806931 rg /OC /oc1 BDC .... 

Grazie per la risposta!

Ecco il punto di partenza per estrarre i diversi comandi di una pagina:

  var file = "test.pdf"; var reader = new PdfReader(file); var streamBytes = reader.GetPageContent(2); var tokenizer = new PRTokeniser(new RandomAccessFileOrArray(streamBytes)); var ps = new PdfContentParser(tokenizer); List operands = new List(); while (ps.Parse(operands).Count > 0) { PdfLiteral oper = (PdfLiteral)operands[operands.Count - 1]; var cmd = oper.ToString(); switch (cmd) { case "q": Console.WriteLine("SaveGraphicsState(); //q"); break; case "Q": Console.WriteLine("RestoreGraphicsState(); //Q"); break; // good luck with the rest! } } 

Questo non è supportato in iTextSharp. Il motivo: l’analisi per il testo restituisce oggetti TextRenderInfo , l’analisi per le immagini restituisce oggetti ImageRenderInfo , ma in quale forma dovremmo restituire GraphicsRenderInfo ? È difficile trovare qualcosa di generico e dipingere in un contesto grafico è troppo specifico.

L’idea è che tu scriva il tuo parser, come ho fatto ad esempio per rimuovere i layer OCG: OCGParser . Questa parte di iText non è stata ancora convertita in iTextSharp, ma forse puoi usarla come fonte di ispirazione.

Tieni presente che stai effettivamente sviluppando la funzionalità PDF in immagine. Non ci sono altri prodotti che già supportano questo fuori dalla scatola?