2010-08-20 2 views
4

현재 iTextSharp를 사용하여 PDF 파일을 만들기 위해 일부 기존 코드를 변환 중입니다. 우리는 내가 지금처럼 삽입하고있어 이미지의 숫자가 포함 된 약간 큰 PDF 파일을 만들 :iTextsharp - 이미지를 삽입 한 후의 PDF 파일 크기

Document doc = new Document(PageSize.A4, 50, 50, 25, 25); 
PdfWriter writer = PdfWriter.GetInstance(doc, myStream); 

writer.SetFullCompression(); 

doc.Open(); 

Image frontCover = iTextSharp.text.Image.GetInstance(@"C:\MyImage.png"); 

//Scale down from a 96 dpi image to standard itextsharp 72 dpi 
frontCover.ScalePercent(75f); 

frontCover.SetAbsolutePosition(0, 0); 

doc.Add(frontCover); 

doc.Close(); 

이미지 삽입을 (PNG 파일 20.8 KB)은 거의 100 KB하여 PDF 파일의 크기를 늘릴 것 .

입력 전에 이미지를 압축하는 방법이 있습니까? (합리적인 인쇄 품질이 필요함을 명심하십시오) 또는 전체 PDF를 더 압축 할 수 있습니까? 위의 예에서 압축을 수행하고 있습니까?

답변

7

대답은 다음과 같이 대상으로 PDF 사양의 적절한 버전을 설정 한 후 압축을 설정해야한다는 것처럼 보인다. 또한 PNG가 문서의 최종 크기와 관련하여 최상의 결과를 제공한다는 사실을 발견했습니다.

+0

완벽하고 매력적으로 일했습니다. – Raghurocks

0

PDF는 png가 다른 것, jpeg로 트랜스 코딩되어야한다고 생각합니다.

는 여기를 참조 : 내가 생각할 수있는 http://forums.adobe.com/message/2952201

있는 유일한 방법은, 75 %를 축소하는 스케일링없이 해당 파일을 가져 오기를 포함하여, 첫째 작은 JPEG를 PNG로 변환하는 것입니다.

PdfWriter writer = PdfWriter.GetInstance(doc, ms); 
PdfContentByte contentPlacer; 

writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_5); 

writer.CompressionLevel = PdfStream.BEST_COMPRESSION; 

것은이 상당히 내 파일 크기를 가져왔다 :

+0

필자는 이것이 반드시 그렇다고 생각하지 않습니다. 내가 찾은 여러 페이지가 PNG를 사용하여 크기를 조절하고 축소하는 것이 좋습니다. 제 자신의 실험에 따르면 JPEG가 더 큰 PDF 용으로 만들어진 것으로 나타났습니다. – Paddy

1

오늘 아침에 실험을했습니다. 내 테스트 이미지는 800x600이고 파일 크기는 100.69K이며 PNG로 저장됩니다. 이것을 iTextSharp와 일반적인 GetInstance() 메서드를 사용하여 PDF에 삽입했으며 파일 크기가 301.71K에서 402.63K로 증가했습니다. 그런 다음 파일 크기가 1,440,054 인 원시 비트 맵으로 테스트 이미지를 다시 저장했습니다. 이것을 PDF에 넣었고 파일 크기는 389.81K로 떨어졌습니다. 흥미 롭 군!

가능한 설명을 위해 웹에서 일부 조사를했는데 iTextSharp가 이미지를 압축하지 않는 것처럼 보였습니다. 오히려 일부 일반적인 압축으로 모든 것을 압축합니다. 즉, BMP는 실제로 다른 파일 유형으로 변환되지 않습니다. BMP는 ZIPping과 매우 비슷하게 압축되었습니다. 그들이하는 일이 무엇이든간에 그것은 PNG 압축을 사용하는 이미지보다 더 잘 압축되기 때문에 좋을 것입니다. iTextSharp woudld PNG 압축하려고하지만 이미 압축 된 때문에 0 % 압축 할 것이라고 가정합니다. (이것은 원래 작성자의 관찰과 일치하지 않지만, Paddy는 자신의 PDF 크기가 PNG의 크기보다 훨씬 더 커 졌다고 말했습니다. 무엇을 만들지 확신 할 수 없습니다. 나는 내 실험 만 할 수 있습니다.)

결론 :

1) 내가 PNG로 내 (최종 동적으로 생성 된) 이미지를 변환하는 내 프로젝트에 몇 가지 멋진 라이브러리를 추가 할 필요가 없습니다; 실제로 압축을 풀지 않고 iTextSharp가 모든 압축 작업을하도록하는 것이 좋습니다.

2) iTextSharp가 특정 DPI에서 이미지를 저장하는 것에 관한 웹의 내용도 읽었습니다. 나는이 문제를 보지 못했습니다 ... ScalePercent() 메서드를 사용하여 비트 맵을 1 %로 크기를 조정하고 파일 크기가 같았으며 비트 맵의 ​​비트 맵 픽셀에 "손실"이 없었습니다 ... 이것은 iTextSharp 간단하고 멋진 일반 무손실 압축을 수행합니다.

관련 문제