Domanda

Devo convertire un PDF in un Codificato Base64 e scriverlo in un elemento in un file XML.
Ho la stringa codificata Base64 (molto lunga / grande) ma la specifica che sto lavorando dice quanto segue:

Questo è stato scelto, per garantire che il file XML possa essere visualizzato e validato senza alcun potenziale problemi causati dalla gestione della composizione binaria non elaborata del file JPEG originale. I dati del file dovrebbero essere visualizzati correttamente in un browser conforme a XML, come Internet Explorer. I dati devono essere presentati in righe di 76 caratteri fisse, ciascuna riga separata da un'interruzione di riga.
La prima domanda riguarda il bit su JPEG è così valido se utilizzo pdf?

In secondo luogo, non sono sicuro di come ottenerlo: i dati devono essere presentati in righe di 76 caratteri fisse, ciascuna riga separata con un'interruzione di riga.
Come posso raggiungere questo con Linq in XML

È stato utile?

Soluzione

Convert.ToBase64String(pdfBytes, Base64FormattingOptions.InsertLineBreaks);

Altri suggerimenti

Questa non è una soluzione molto efficiente a causa degli inserimenti (probabilmente sarebbe meglio costruire la stringa aggiungendo 76 caratteri dal contenuto del file codificato, quindi una nuova riga, quindi 76 caratteri, quindi ancora una nuova riga,. ..) ma è breve e dimostra l'idea generale. Se l'uso della memoria e le prestazioni sono un problema, si potrebbe anche pensare di sostituire la chiamata Convert.ToBase64String () per codice che codifica direttamente i byte in 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());
}

Ad esempio

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());

stampa quanto segue.

<?xml version="1.0" encoding="utf-16"?>
<Content>
SSBoYXZlIGdvdCB0byBjb252ZXJ0IGEgUERGIHRv
IGEgQmFzZTY0IEVuY29kZWQgYW5kIHdyaXRlIGl0
IHRvIGEgZWxlbWVudCBpbiBhIFhNTCBmaWxlLg==
</Content>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top