2017-12-01 10 views
-1

pdf 문서를 180도 회전하려고합니다. 처음에 byte []로 저장되었으므로 동일한 값으로 반환해야합니다. 이렇게하면 출력 스트림에 고객에게 쓸 수 있습니다. 나는 몇 가지 라이브러리 (iText를, freesharp, 첨탑)을 시도했습니다바이트 []을 pdf로 변환, 180도 회전, 바이트 [] 및 response.outputstream으로 돌아 가기

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

제대로 중 어느 것도 조작하지 않고 출력이 내 작업의 회전이없는 코드입니다. 사전에

감사합니다, 라스무스 Edvardsen

편집 : 언어는 C#을, 그리고 그것이 MVC 웹 응용 프로그램입니다. EDIT2 : John의 대답이 내 문제를 해결했습니다. 나는 또한 itextsharp의 구식 버전을 가지고 있었기 때문에 내가 시도한 대부분의 다른 솔루션이 같은 방식으로 실패한 이유에 대한 답변을 얻을 수있었습니다. 거만한 것으로부터 벗어나려는 의도는 절대로 없지만 그것이 어떻게 나왔는지 깨닫습니다. 죄송합니다. 감사합니다.

+0

가 정교하게하십시오 : 를 * 작업중인 어떤 언어? * 어떤 프레임 워크를 사용하고 있습니까? 현재 바이트 [] 데이터 만 전달 중이므로 내용을 변경하면 몇 가지 추가 단계가 필요합니다 (pdf로 해석하면 모든 페이지에 변환 내용이 적용됩니다). – DThought

+0

* "여러 라이브러리를 시도했습니다. (itext, freesharp, spire), 아무 것도 올바르게 조작하고 출력하지 않습니다. "* - 문제가없는 다른 프로그래머는 iText와 Spire.PDF를 사용합니다. 그래서 당신이 뭔가 잘못했을 가능성이 큽니다. 회전을위한 코드를 표시하지 않으므로 말할 것도 없습니다. (나는 freesharp 라이브러리를 모른다. 그래서 그것에 대해 아무 것도 말할 수 없다.) – mkl

답변

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 
+0

신경 쓰지 마, 알아 냈다. 감사. –

+0

매개 변수 변수를 조작합니다. 따라서 페이지 2에서 결과가 잘못된 방향으로 회전 될 수 있습니다. – mkl

+0

@mkl 나는 이것을 이미 테스트했다. 그리고 조작은 문서가 이미 회전 된 경우를위한 것입니다. –