Question

Je dois convertir un fichier PDF en fichier encodé en Base64 et l'écrire en un élément d'un fichier XML.
J'ai reçu la chaîne encodée en Base64 (très long / gros), mais la spécification qui fonctionne indique ce qui suit:

Cette option a été choisie pour garantir que le fichier XML puisse être affiché et validé sans potentiel. problèmes causés par le traitement de la composition binaire brute du fichier JPEG d'origine. Les données du fichier doivent afficher correctement dans un navigateur compatible XML, tel qu'Internet Explorer. Les données doivent être présentées en lignes fixes de 76 caractères, chaque ligne étant séparée par un saut de ligne.
La première question concerne le format JPEG est-il valable si j'utilise le format PDF?

Deuxièmement, vous ne savez pas comment y parvenir: les données doivent être présentées en lignes de 76 caractères fixes, chaque ligne étant séparée par un saut de ligne.
Comment puis-je obtenir cela avec Linq to XML

Était-ce utile?

La solution

Convert.ToBase64String(pdfBytes, Base64FormattingOptions.InsertLineBreaks);

Autres conseils

Ce n'est pas une solution très efficace à cause des insertions (il serait probablement préférable de construire la chaîne en ajoutant 76 caractères à partir du contenu du fichier codé, puis une nouvelle ligne, puis 76 caractères, puis encore une nouvelle ligne,. ..) mais il est court et illustre l’idée générale. Si l'utilisation et les performances de la mémoire posent un problème, on pourrait également envisager de remplacer l'appel Convert.ToBase64String () par un code qui code directement les octets dans le 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());
}

Par exemple

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 ce qui suit.

<?xml version="1.0" encoding="utf-16"?>
<Content>
SSBoYXZlIGdvdCB0byBjb252ZXJ0IGEgUERGIHRv
IGEgQmFzZTY0IEVuY29kZWQgYW5kIHdyaXRlIGl0
IHRvIGEgZWxlbWVudCBpbiBhIFhNTCBmaWxlLg==
</Content>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top