MS SQL Report Server 웹 서비스를 사용하여 PDF 형식의 보고서를 생성하고 있습니다.
byte[] Input;
ReportServer report = new ReportServer(serverUrl + @"/ReportExecution2005.asmx", reportPath);
Input = report.RenderToPDF(reportParamNames, reportParamValues);
이 서비스는 pdf 파일이있는 바이트 배열을 반환합니다.
iTextSharp에이 바이트 배열로드가 필요합니다.
using (MemoryStream ms = new MemoryStream(Input)) {
Document doc = new Document();
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
...
}
괜찮아 보이지만이 PDF에 첨부 파일을 추가하려고합니다.
PdfFileSpecification pfs = PdfFileSpecification.FileEmbedded(writer, xmlInputFile, xmlFileDisplayName, null);
writer.AddFileAttachment(pfs);
이것도 괜찮아 보이지만 스트림을 파일에 저장하면 결과 pdf가 올바르지 않습니다.
첨부 파일은 항상 XML 파일이므로 메모리에 생성해야하며 파일 시스템에는 포함되지 않습니다. iTextSharp로 어떻게 할 수 있습니까?
나는 읽었다 :
이 서비스는 pdf 파일이있는 바이트 배열을 반환합니다. iTextSharp에이 바이트 배열로드가 필요합니다.
using (MemoryStream ms = new MemoryStream(Input)) { Document doc = new Document(); PdfWriter writer = PdfWriter.GetInstance(doc, ms); doc.Open(); ... }
괜찮아 보인다
이것은 괜찮지 않습니다 . 당신은 그러나 당신이 사용하고, 기존의 PDF 파일에 첨부 파일을 추가 할 Document
및 PdfWriter
만들 클래스를하는 처음부터 새 PDF 문서를 .
설명서를 읽으십시오 . 다양한 클래스와 사용시기에 대한 개요를 제공하는 편리한 표 (6.1)가 있습니다.
PdfReader
및 PdfStamper
클래스에 대한 설명을 인용합니다 .
PdfReader
: PDF 파일을 읽습니다. 이 클래스의 인스턴스를 다른 PDF 조작 클래스 중 하나에 전달합니다.
PdfStamper
: 하나의 PDF 문서 만 조작합니다. 절대 위치에 콘텐츠를 추가하거나 추가 페이지를 추가하거나 필드를 채우는 데 사용할 수 있습니다. 모든 대화 형 기능은 명시 적으로 제거하는 경우 (예 : 양식 병합)를 제외하고는 유지됩니다.
우리는 당신이 잘못을하고 있다는 것을 설립 : 당신은 사용해야 PdfReader
하고 PdfStamper
대신 Document
과 PdfWriter
. 이제 몇 가지 예를 살펴 보겠습니다 .
PdfReader reader = new PdfReader(pdf_bytes);
using (var ms = new MemoryStream()) {
using (PdfStamper stamper = new PdfStamper(reader, ms)) {
PdfFileSpecification pfs = PdfFileSpecification.FileEmbedded(
stamper.Writer, xmlInputFile, xmlFileDisplayName, null);
stamper.AddFileAttachment(pfs);
}
reader.Close();
return ms.ToArray();
}
보시다시피 PdfReader
메모리에 보관 된 바이트를 사용하여 인스턴스를 만듭니다 . 그런 다음 을 사용하여 바이트 PdfStamper
를 사용하는 새 파일을 만듭니다 MemoryStream
.
살펴 보시기 바랍니다 에 StackOverflow에 최고의 iText를 질문 보다 답변을.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다