A continuación con un ejemplo te muestro como es posible hacerlo:
EntityDB db= new EntityDB();
var lst = from d in db.tabla.ToList() //es importante hacerlo lista
select new TablaViewModel
{
id = d.id,
//campo es string por lo cual
//nuestra función delegada regresara igual string
campo = (new Func<string>(() => {
try {
//utilizamos if
if(d.alguncampo==1){
return "Activo";
}else{
return "Inactivo";
}
}
catch {
//si ocurre un error
return "Error";
}
}
)
)()
};
De esta manera podemos manipular la información para lograr el resultado deseado.
Para convertir un archivo XML ya timbrado a un objeto en C# haremos uso de la deserialización.
Lo primero que debes hacer es descargar las 2 clases que están debajo, estas clases fueron generadas por medio de los xsd del SAT (Como convertir un archivo xsd a clases).
Una vez que tengas estas clases debes hacer lo siguiente (comento línea a línea para que entiendas el flujo):
//crear un objeto el cual tendrá el resultado final, este objeto es el principal
Comprobante oComprobante;
//pon la ruta donde tienes tu archivo XML Timbrado
string path = @"C:\miXML.xml";
//creamos un objeto XMLSerializer para deserializar
XmlSerializer oSerializer = new XmlSerializer(typeof(Comprobante));
//creamos un flujo el cual recibe nuestro xml
using (StreamReader reader= new StreamReader(path))
{
//aqui deserializamos
oComprobante = (Comprobante)oSerializer.Deserialize(reader);
//Deserializamos el complemento timbre fiscal
foreach (var oComplemento in oComprobante.Complemento)
{
foreach (var oComplementoInterior in oComplemento.Any)
{
//si el complemento es TimbreFiscalDigital lo deserializamos
if (oComplementoInterior.Name.Contains("TimbreFiscalDigital")) {
//Objeto para aplicar ahora la deserialización del complemento timbre
XmlSerializer oSerializerComplemento = new XmlSerializer(typeof(TimbreFiscalDigital));
//creamos otro flujo para el complemento
using (var readerComplemento = new StringReader(oComplementoInterior.OuterXml))
{
//y por ultimo deserializamos el complemento
oComprobante.TimbreFiscalDigital =
(TimbreFiscalDigital)oSerializerComplemento.Deserialize(readerComplemento);
}
}
}
}
}
El código a continuación viene comentado paso a paso para que puedas entender cómo se puede insertar texto en un archivo PDF existente.
//rutas de nuestros pdf
string pathPDF = @"C:\original.pdf";
string pathPDF2 = @"C:\con_texto.pdf";
//Objeto para leer el pdf original
PdfReader oReader = new PdfReader(pathPDF);
//Objeto que tiene el tamaño de nuestro documento
Rectangle oSize = oReader.GetPageSizeWithRotation(1);
//documento de itextsharp para realizar el trabajo asignandole el tamaño del original
Document oDocument = new Document(oSize);
// Creamos el objeto en el cual haremos la inserción
FileStream oFS = new FileStream(pathPDF2, FileMode.Create, FileAccess.Write);
PdfWriter oWriter = PdfWriter.GetInstance(oDocument, oFS);
oDocument.Open();
//El contenido del pdf, aqui se hace la escritura del contenido
PdfContentByte oPDF = oWriter.DirectContent;
//Propiedades de nuestra fuente a insertar
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
oPDF.SetColorFill(BaseColor.RED);
oPDF.SetFontAndSize(bf, 8);
//Se abre el flujo para escribir el texto
oPDF.BeginText();
//asignamos el texto
string text = "HOLA SOY UN TEXTO ROJO EN UN PDF";
// Le damos posición y rotación al texto
// la posición de Y es al revés de como estamos acostumbrados
oPDF.ShowTextAligned(1, text, 30, oSize.Height-30, 0);
oPDF.EndText();
//crea una nueva pagina y agrega el pdf original
PdfImportedPage page = oWriter.GetImportedPage(oReader, 1);
oPDF.AddTemplate(page, 0, 0);
// Cerramos los objetos utilizados
oDocument.Close();
oFS.Close();
oWriter.Close();
oReader.Close();
Para contratar el servicio de timbrado comunícate al siguiente teléfono (33) 36581329 o al correo electrónico[email protected]. Y si deseas un DESCUENTO diles que viste los videos de Héctor de León o hdeleon.
En este video te mostrare como timbrar el xml que en los videos anteriores construimos y sellamos.
Gratuitamente te enseñare como puedes crear tu factura electrónica con los siguientes videos, te aseguro que después de ver los videos podrás entender a la perfección como realizar el cfdi 3.3 que tanto martirio tiene a todos los contribuyentes en México.
Te invito a que te suscribas a mi canal de youtube para mas videos interesantes sobre programación.
1.- ¿Cómo convertir archivos XSD a clases de C# .Net? cfdi 3.3
En este primer video te muestro como generar automáticamente las clase a partir de los archivos xsd del SAT.
2.- ¿Cómo crear el XML para cfdi 3.3 facturación electrónica C# .Net? – Limpiando código
Una vez que creaste las clases de manera automatica, es momento de optimizarlas, y a continuación te muestro como hacerlo.
3.- ¿Cómo crear el XML para cfdi 3.3 facturación electrónica C# .Net? – implementando anexo 20
Ya por fin que tenemos nuestras clases adecuadas para crear el archivo XML, es momento de ir llenandolo conforme el anexo 20 del SAT, para ello te explico los campos del SAT para que son y como llenarlos de la forma correcta.
4.- ¿Cómo sellar el XML para cfdi 3.3 facturación electrónica C# .Net? – utf8, obtener número de Certificado
Ya que tenemos el xml listo, es momento comenzar el sellado, y te diré como obtener el numero del certificado; tambien te enseñare como cambiar la codificación de tu xml a utf8.
5.- ¿Cómo sellar el XML para cfdi 3.3 facturación electrónica C# .Net? – Sellar con key
Ya por fin vamos a sellar nuestro xml con nuestro archivo key, al igual te mostrare como arreglar el problema con los campos FieldSpecified que se generaron al crear nuestras clases en el primer video, agregar los namespace adecuados del SAT, y a obtener la cadena original por medio del archivo xslt necesaria para el sellado.
6.- ¿Cómo timbrar el XML para cfdi 3.3 facturación electrónica C# .Net? – conectandonos al PAC
Ya por fin en este vide veras como realizar el mitico timbrado de la factura, con lo cual tu factura ya sera valida para el SAT.
Para contratar el servicio de timbrado comunícate al siguiente teléfono (33) 36581329 o al correo electrónico[email protected]. Y si deseas un DESCUENTO diles que viste los videos de Héctor de León.
Si eres un perezoso o te urge hacer la facturación electrónica, te dejo el enlace al código del proyecto, espero te sirva: Código del proyecto
Dudas y comentarios pueden hacérmelos llegar en los comentarios abajo.
En este video te mostrare como contrarrestar los campos FieldSpecified creados en el primer video, poner el formato correcto de fecha, obtener la cadena original, obtener el campo certificado, poner los namespaces al xml, y por ultimo como sellar el xml con tu key.
Comparto la siguiente clase la cual sirve para crear el xml para la facturación electrónica, igual les recomiendo que vean los videos que se encuentran abajo para que sepan cómo utilizarla.