将Base64编码转换为PDF文件

9

我尝试了多种解决方案,但每次都出现无法打开pdf的错误。这是带有需要转换为.pdf的实际数据流的编辑代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Globalization;
using System.Threading;

namespace ConsoleApplication3
{
class Program
{
    static void Main(string[] args)
    {
        try
        {
            string base64BinaryStr = "Q29tcGFueSBTZXJ2aWNpbmcNCjEuCVRvb2xiYXIgQ29tcGFueSBTZXJ2aWNpbmcgU2VsZWN0IEFuIEFjY291bnQNCjIuCVRvb2xiYXJfQ29tcGFueSBTZXJ2aWNpbmcgRG91YmxlIENsaWNrIG9uIGFuIEFjY291bnQNCjMuCVRvb2xiYXIgQ29tcGFueSBTZXJ2aWNpbmdfRW50ZXIgYWNjb3VudCBudW1iZXIgaW4gdGhlIE51bWJlciBmaWVsZCBvZiB0aGUgQWNvdW50IFNlYXJjaCBTZWN0aW9uDQo0LglUb29sYmFyIENvbXBhbnkgU2VydmljaW5nX1JldHVybg0KNS4JVG9vbGJhciBDb21wYW55IFNlcnZpY2luZ19DbG9zZQ0KNi4JVG9vbGJhciBDb21wYW55IFNlcnZpY2luZ19NZW1vc19DbGVhciBCdXR0b24NCjcuCVRvb2xiYXJfQ29tcGFueSBTZXJ2aWNpbmdfTWVtb3NfQWRkIEJ1dHRvbg0KOC4JVG9vbGJhcl9Db21wYW55IFNlcnZpY2luZ19NZW1vc19BbHQtQSBUbyBBZGQgQSBNZW1vDQo5LglUb29sYmFyX0NvbXBhbnkgU2VydmljaW5nX01lbW9zX0NoYW5nZQ0KMTAuCVRvb2xiYXJfQ29tcGFueSBTZXJ2aWNpbmdfTWVtb3NfRGVsZXRlIEJ1dHRvbg0KMTEuCVRvb2xiYXJfQ29tcGFueSBTZXJ2aWNpbmdfTWVtb3NfUmVmcmVzaA0KMTIuCVRvb2xiYXJfQ29tcGFueSBTZXJ2aWNpbmdfTWVtb3NfQ2xvc2UgQnV0dG9uDQoxMy4JVG9vbGJhcl9Db21wYW55IFNlcnZpY2luZ19TcGVuZGluZyBDb250cm9sX0VsaXRlDQoxNC4JVG9vbGJhcl9Db21wYW55IFNlcnZpY2luZ19TcGVuZGluZyBDb250cm9sX0Rlc2NyaXB0aW9uIGJ1dHRvbg0KMTUuCVRvb2xiYXJfQ29tcGFueSBTZXJ2aWNpbmdfU3BlbmRpbmcgQ29udHJvbF9EZXNjcmlwdGlvbiBidXR0b25fU2VsZWN0IFNwZW5kaW5nIENvbnRyb2wNCjE2LglUb29sYmFyX0NvbXBhbnkgU2VydmljaW5nX1NwZW5kaW5nIENvbnRyb2xfRGVzY3JpcHRpb24gYnV0dG9uX1NwZW5kaW5nIENvbnRyb2wgTGluayB0byBWTA0KMTcuCVRvb2xiYXJfQ29tcGFueSBTZXJ2aWNpbmdfU3BlbmRpbmcgQ29udHJvbF9EZXNjcmlwdGlvbl9DbG9zZSBidXR0b24NCjE4LglUb29sYmFyX0NvbXBhbnkgU2VydmljaW5nX1NwZW5kaW5nIENvbnRyb2xfU2VsZWN0IEFsbF9WaWV3IFRyYW5zYWN0aW9ucw0KMTkuCVRvb2xiYXJfQ29tcGFueSBTZXJ2aWNpbmdfU3BlbmRpbmcgQ29udHJvbF9TcGVuZGluZyBDb250cm9sIExpbmsgdG8gVkwNCjIwLglUb29sYmFyX0NvbXBhbnkgU2VydmljaW5nX1NwZW5kaW5nIENvbnRyb2xfQ2FuY2VsIGJ1dHRvbg0K";

            byte[] sPDFDecoded = Convert.FromBase64String(base64BinaryStr);




            BinaryWriter writer = new BinaryWriter(File.Open(@"c:\Users\u316383\Documents\pdf9.pdf", FileMode.CreateNew));
            writer.Write(sPDFDecoded);

            string s = Encoding.UTF8.GetString(sPDFDecoded);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
            Console.ReadLine();
        }
    }
}

}


这个相当短的Base64字符串是否是有效的PDF文件?即使是作为头部来说,似乎也太短了。 - xxbbcc
实际文件很大,但这个文件也是有效的,因为我已经检查过了。字符串“s”是正确的。如果您想要,我可以提供整个字符串。我通过“http://www.motobit.com/util/base64-decoder-encoder.asp”检查了该字符串。 - Vicky
如果实际字符串可以帮助的话:"AAAAgMgCJ1yy5DW70Be12y3klAG1g8EUEJu6WlH+SCsgfZDDDUs70F9rnfHvgXYhZcbFc3zzSx8KUzsk2aqXsdjgC9Kkgl7U8CkqcVY2Wqe36q9IhNoGDtpQeP4ZO5zzCUaN1bBrtRAn3BpCvbvJpA3Eib8/MCC4DjzHaBAr/hhMSvEZK6/MtNP8nqlZ8Xvs7Gt8ZRs/IC/LPGXJe+F2jsUKfii58BXhXJQ7iJXM7fVTQtKyJgwv3MoPwvrIyGtEW8EtChIB6alPuE4zSmVyzkElJ+JPfW/EOjYY4AxWN0fc+CAz6ERA3Rnre6mm+D0Sa6enc319H4MYer/eqRXRALzOl5sT+AlRJmUVulC9XSL9GouX3gz56HjW+nHsKGCSgWmfgTCmIgUbhtViv/OxeA9C8icQEYQ+3glytzMF99h/YiZFJZBukOkjmSEkZdz2ndwAg1SuLqoBOKBZaQ1hf5MxBzW4g3AiXtIt0jJFSHe9KPqkSOW5yxofEQN+RQyY15Ve9A==" - Vicky
学习如何使用 using 或者使用 File.WriteAllBytes(path, data) 写入文件并不能解决你的问题,而且我们无法在没有实际 PDF 数据的情况下看到问题。 - Sten Petrov
我已经根据建议复制并修改了问题。希望这有所帮助。 - Vicky
显示剩余3条评论
1个回答

18

我收到了错误的字符串。对于任何其他参考,我的代码如下:

byte[] sPDFDecoded = Convert.FromBase64String(base64BinaryStr);
    
File.WriteAllBytes(@"c:\Users\u316383\Documents\pdf8.pdf", sPDFDecoded);

谢谢大家。


我曾尝试使用 Encoding.UTF8.GetString(Convert.FromBase64String()) 进行解码。将字节写入文件而不是字符串,解决了我的问题。 - atoms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接