Pregunta

Tengo que convertir un PDF a un codificador Base64 y escribirlo en un elemento en un archivo XML.
Tengo la cadena codificada Base64 (muy larga / grande) pero la especificación en la que estoy trabajando dice lo siguiente:

Esto ha sido elegido, para garantizar que el archivo XML se pueda mostrar y validar sin ningún potencial problemas causados ??por el manejo de la composición binaria sin formato del archivo JPEG original. Los datos del archivo deben mostrar correctamente en un navegador compatible con XML, como Internet Explorer. Los datos deben presentarse en filas fijas de 76 caracteres, cada fila separada con un salto de línea.
La primera pregunta es acerca del bit sobre JPEG: ¿es válido si uso pdf?

En segundo lugar, no estoy seguro de cómo lograr esto: los datos deben presentarse en filas fijas de 76 caracteres, cada fila separada con un salto de línea.
¿Cómo puedo lograr esto con Linq to XML?

¿Fue útil?

Solución

Convert.ToBase64String(pdfBytes, Base64FormattingOptions.InsertLineBreaks);

Otros consejos

Esta no es una solución muy eficiente debido a las inserciones (probablemente sería mejor construir la cadena agregando 76 caracteres del contenido del archivo codificado, luego una nueva línea, luego 76 caracteres, luego nuevamente una nueva línea,. ..) pero es breve y demuestra la idea general. Si el uso de la memoria y el rendimiento son una preocupación, también se podría pensar en reemplazar la llamada Convert.ToBase64String () por código que codifica directamente los bytes en el StringBuilder .

public static XElement BuildNode(Byte[] data, XName tagName, Int32 lineLength)
{
    StringBuilder sb = new StringBuilder(Convert.ToBase64String(data));

    Int32 position = 0;

    while (position < sb.Length)
    {
        sb.Insert(position, Environment.NewLine);
        position += lineLength + Environment.NewLine.Length;
    }

    sb.AppendLine();

    return new XElement(tagName, sb.ToString());
}

Por ejemplo

String text = "I have got to convert a PDF to a Base64 Encoded " +
              "and write it to a element in a XML file.";

Byte[] data = Encoding.UTF8.GetBytes(text);

StringBuilder sb = new StringBuilder();
TextWriter tw = new StringWriter(sb);

using (var writer = new XmlTextWriter(tw) { Formatting = Formatting.Indented })
{
    XDocument document = new XDocument(BuildNode(data, "Content", 40));

    document.Save(writer);
}

Console.WriteLine(sb.ToString());

imprime lo siguiente.

<?xml version="1.0" encoding="utf-16"?>
<Content>
SSBoYXZlIGdvdCB0byBjb252ZXJ0IGEgUERGIHRv
IGEgQmFzZTY0IEVuY29kZWQgYW5kIHdyaXRlIGl0
IHRvIGEgZWxlbWVudCBpbiBhIFhNTCBmaWxlLg==
</Content>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top