将内存中的pdf转换为byte []

时间:2010-04-12 08:41:41

标签: c# web-services bytearray

我正在C#中编写一个websercive,它将生成pdf文件并作为byte []发送回调用者。 pdf文件是使用第三方组件生成的,但我正在努力进行转换。 pdf只是Web服务中的内存中对象,在将生成的pdf返回给调用者之前,我找不到将生成的pdf转换为byte []的任何好方法。对此有何建议?

编辑澄清:

我正在使用pdf内存中对象(确切地说是Aspose.pdf Pdf-object),它是使用发送到Web服务的数据在Web服务中构建的。它永远不会被web服务保存,调用者应该将byte []转换回pdf文件并将其保存在结尾。

3 个答案:

答案 0 :(得分:6)

如果PDF库允许保存到流,您可以将其流式传输到MemoryStream - 您可以通过调用GetBuffer来获取byte[]

答案 1 :(得分:2)

您可以将文档显然保存()到流对象:

http://www.aspose.com/documentation/.net-components/aspose.pdf-for-.net/aspose.pdf.pdf.save_overload_3.html

您可以创建一个MemoryStream对象并将其发送到Save()方法以获取二进制数据。

答案 2 :(得分:1)

我记得有一段时间与Aspose.pdf做类似的事情。这是我编写的一些POC代码,它打开一个PDF页面并将其恢复。希望它有所帮助..

   public ActionResult Index(int pageNumber)
    {


        ActionResult result = null;
        var path = Server.MapPath("~/Content/BigPdf.pdf");

        if (pageNumber == 0)
        {

            result = new FilePathResult(path, "application/pdf");
        }

        else
        {
            string inFile = path;

            string outFile = ".\\ExtractStream.pdf";



            //Creating stream objects holding the PDF files in Open Mode

            var inStream = new FileStream(inFile, FileMode.Open);


            //Creating output stream object that will store the extracted pages as a PDF file

            var outputStream = new MemoryStream();



            //Instantiating PdfFileEditor object

            var editor = new PdfFileEditor();



            //Creating an array of integers having numbers of the pages to be extracted from PDF file

            var pages = new int[] { pageNumber };



            //Calling Extract method

            editor.Extract(inStream, pages, outputStream);
            inStream.Close();


            //Closing output stream
            outputStream.Seek(0, SeekOrigin.Begin);//rewind stream


            var converter = new PdfConverter();

            converter.BindPdf(outputStream);

            converter.DoConvert();


            var imageStream = new MemoryStream();

            while (converter.HasNextImage())
            {

                converter.GetNextImage(imageStream, ImageFormat.Jpeg );



            }



            imageStream.Seek(0, SeekOrigin.Begin);//rewind stream

            result = new FileStreamResult(imageStream, "image/Jpeg");


        }

        return result;

    }