将byte []转换为pdf,旋转180度,返回byte []和response.outputstream

时间:2017-12-01 08:32:01

标签: arrays pdf model-view-controller rotation

我正在尝试将pdf文档旋转180度。最初存储为byte [],它应该返回到相同的位置,以便我可以将它写入输出流给我们的客户。这是我没有轮换的工作代码:

            if (pdfurl == null)
                return View(errorview);
            var response = Response;
            var getbyteresult = WebService.GetPDFAsByteArray(pdfurl);
            MemoryStream ms = new MemoryStream(getbyteresult);
            response.Clear();
            response.ContentType = "application/pdf";
            response.AddHeader("content-disposition", 
            "attachment;filename=label.pdf");
            response.Buffer = true;
            ms.WriteTo(response.OutputStream);
            response.End();
            return View("~/Views/Order/pdf.cshtml");

我尝试了几个库(itext,freesharp,spire),没有正确操作和输出。

提前致谢, Rasmus Edvardsen

编辑:语言是C#,它是一个MVC Web应用程序。 编辑2:约翰的答案解决了我的问题 - 我也有一个过时的版本的itextsharp,所以这就解释了为什么我尝试的大多数其他解决方案失败的方式相同。 从来没有打算作为傲慢或任何东西,但我意识到它是如何出来的。对不起,谢谢。

1 个答案:

答案 0 :(得分:0)

看看你的示例代码,在我看来你正在使用C#,所以这里有一个勺子喂你。

使用iTextSharp

    private byte[] RotatePDF(byte[] pdfBytes, int rotation)
    {
        byte[] renderedBytes = null;

        using (MemoryStream ms = new MemoryStream())
        {
            Document document = new Document();
            PdfCopy pdf = new PdfCopy(document, ms);
            PdfReader pdfReader = null;
            PdfStamper stamper = null;
            try
            {
                document.Open();
                pdfReader = new PdfReader(pdfBytes);
                stamper = new PdfStamper(pdfReader, ms);

                for (int i = 1; i <= pdfReader.NumberOfPages; i++)
                {
                    PdfDictionary pageDict = pdfReader.GetPageN(i);
                    PdfNumber pdfRotation = pageDict.GetAsNumber(PdfName.ROTATE);

                    if (pdfRotation != null)
                    {
                        rotation += pdfRotation.IntValue;
                        rotation %= 360;
                    }

                    pageDict.Put(PdfName.ROTATE, new PdfNumber(rotation));
                }

                pdf.AddDocument(pdfReader);
                pdfReader.Close();
            }
            catch (Exception)
            {
                renderedBytes = null;
            }
            finally
            {
                if (pdfReader != null)
                {
                    pdfReader.Close();
                }
                if (document != null)
                {
                    document.Close();
                }
            }

            renderedBytes = ms.ToArray();

            return renderedBytes;
        }
    }

用法:

    var getbyteresult = WebService.GetPDFAsByteArray(pdfurl);
    getbyteresult = RotatePDF(getbyteresult, 180); // 90 180 270 360