rectangle chart addcell c# graphics itextsharp

chart - pdfptable itextsharp c#



Extrae caminos y formas con iTextSharp (2)

iTextSharp admite la creación de formas y caminos con la clase PdfContentByte , allí puedes establecer colores y pintar curvas y elementos básicos ... ¿hay algún mecanismo que haga lo contrario? Puedo obtener contenido llamando a PdfReader.GetPageContent(...) pero no encontré un "analizador" para leer esas operaciones, aplicarlas al contexto de gráficos y, por ejemplo, pintarlas en un panel.

Ejemplo:

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 ....

¡Gracias por responder!


Aquí está el punto de partida para extraer los diferentes comandos de una página:

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<PdfObject> operands = new List<PdfObject>(); 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! } }


Eso no es compatible con iTextSharp. La razón: el análisis para el texto devuelve objetos TextRenderInfo , el análisis de imágenes devuelve objetos ImageRenderInfo , pero ¿en qué forma debemos devolver GraphicsRenderInfo ? Es difícil encontrar algo genérico, y pintar en un contexto gráfico es demasiado específico.

La idea es que usted escriba su propio analizador, como lo hice, por ejemplo, para eliminar capas OCG: OCGParser . Esta parte de iText aún no ha sido portada a iTextSharp, pero tal vez puedas usarla como inspiración.

Tenga en cuenta que en realidad está creando PDF a la funcionalidad de la imagen. ¿No hay otros productos que ya admitan esto de la caja?