2009-06-17 41 views
0

我必须将PDF转换为Base64编码并将其写入XML文件中的元素。
我已经得到了Base64编码字符串(很长/大),但规范IM从工作说以下内容:Linq to XML(Base64编码)

我们已经选择,以确保可以显示和验证,而不引起任何潜在 问题的XML文件通过处理原始JPEG文件的原始二进制组合。文件数据应在符合XML的浏览器(如Internet Explorer)中正确显示 。数据必须以固定的76个字符行显示,每行用换行符分隔。
第一个问题是关于JPEG的位有效,如果我使用PDF?

其次不知道如何实现:数据必须以固定的76个字符行显示,每行用换行符分隔。
我怎样才能达到这与Linq到XML

回答

3
Convert.ToBase64String(pdfBytes, Base64FormattingOptions.InsertLineBreaks); 
1

这是不是一个非常有效的解决方案,因为插入(它可能会更好地构建字符串,从编码的文件内容中添加76个字符,然后一个新行,然后是76个字符,然后又是一个新的行,...),但它很短并显示出总体思路。如果需要考虑内存使用情况和性能,还可以考虑用直接将字节编码为StringBuilder的代码替换Convert.ToBase64String()调用。

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

例如

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

打印以下。

<?xml version="1.0" encoding="utf-16"?> 
<Content> 
SSBoYXZlIGdvdCB0byBjb252ZXJ0IGEgUERGIHRv 
IGEgQmFzZTY0IEVuY29kZWQgYW5kIHdyaXRlIGl0 
IHRvIGEgZWxlbWVudCBpbiBhIFhNTCBmaWxlLg== 
</Content>