2011-01-31 6 views
2

나는 사용자가 pdf를보고 pdf를 인쇄 할 수있는 웹 페이지가 있습니다. 인쇄 PDF는 디스플레이 PDF의 사본이며 ItextSharp를 사용하여 자동 인쇄를 허용하는 자바 스크립트를 삽입하고 있습니다. 나는 사용자가 pdf를 업로드 할 수있는 방법을 가지고 있으며 아래에이 방법을 호출하여 표시 사본을 pdf로 복사합니다. 두 PDF 파일 모두 데이터베이스에 저장됩니다. 그러나 사용자가 내 웹 페이지에서 인쇄 버튼을 클릭하면 다음과 같은 오류가 나타납니다. 아래 코드는 내 인쇄물에 추가되는 코드입니다.이 코드는 저에게는 잘 작동하지만 내 고객 사이트에는 적합하지 않습니다.ItextSharp Dict 개체가 필요합니다. 인쇄하려고 할 때

파일을 손상시킬 수있는 잘못된 작업을하고 있습니다. 원본 pdf 내용은 이진 객체로 전달됩니다.

이 문제에 대한 도움은이 기사에서 매우 혼란 스러우며 많은 도움이됩니다. 또한 ASP.NET MVC2 사용하고 있습니다.

MemoryStream originalPdf = new MemoryStream(Content.BinaryData);  
MemoryStream updatedPdf = new MemoryStream(); 
updatedPdf.Write(Content.BinaryData,0, Content.BinaryData.Length); 
PdfReader pdfReader = new PdfReader(originalPdf); 
PdfStamper pdfStamper = new PdfStamper(pdfReader, updatedPdf);  

if (autoPrinting) 
{ 
    pdfStamper.JavaScript = "this.print(true);\r"; 
} 
else 
{ 
    pdfStamper.JavaScript = null; 
} 

pdfStamper.Close(); 
pdfReader.Close(); 

Content.BinaryData = updatedPdf.ToArray(); 

답변

1

출력물에 원본 PDF를 쓰지 마십시오. pdfStamper.close()모두입니다. 추가 모드 (사용하지 않음)에서도 작성됩니다.

에 코드를 읽어야합니다

MemoryStream originalPdf = new MemoryStream(Content.BinaryData); 
MemoryStream updatedPdf = new MemoryStream(); 

// Don't do that. 
//updatedPdf.Write(Content.BinaryData,0, Content.BinaryData.Length); 

PdfReader pdfReader = new PdfReader(originalPdf); 
PdfStamper pdfStamper = new PdfStamper(pdfReader, updatedPdf); 

if (autoPrinting) { 
    pdfStamper.JavaScript = "this.print(true);\r"; 
} else { 
    pdfStamper.JavaScript = null; 
} 

pdfStamper.Close(); // this does it for you. 
pdfReader.Close(); 

Content.BinaryData = updatedPdf.ToArray(); 

나는이 "당신을 위해 일하는"고 놀랐어요. 아무것도 없다면 바이트 오프셋이 모두 잘못 될 수 있기 때문에 JS가 실패 할 것이라고 기대할 수 있습니다 ... 사실 모든 오프셋은 모두 잘못 될 것입니다. 나는 C#에 대한 나의 무지가 보여주고 있다고 생각한다.

그러나 Write()는 내가 생각했던 방식대로 동작하므로 놀랄 것입니다.

+0

건배 마킹 해 주신 것에 감사드립니다. 트릭을 완료 한 것처럼 보입니다. –

+0

고마워요, 고마워요! 이것은 여러 문서를 가지고 여러 가지 문제를 해결했습니다. –

관련 문제