2010-03-26 2 views
7

iTextSharp를 사용하여 PDF 문서를 인쇄하고 있습니다. 회사 로고를 인쇄 할 때까지 모든 것이 괜찮습니다.iTextSharp는 이미지 품질이 좋지 않은 이미지를 PDF로 렌더링합니다.

처음에는 로고의 품질이 좋지 않았지만 여러 이미지로 테스트 한 후 iTextSharp가 제대로 렌더링하지 못했다는 것을 알게되었습니다. 내가 말한 테스트는 코드를 사용하여 PDF를 인쇄 한 다음 Acrobat 8.0으로 문서를 편집하고 이미지를 그렸습니다. 그런 다음 두 개의 문서를 인쇄하고 눈에 띄는 차이를 보았습니다. 내 질문은 이것이 스케일링 문제로 인해 내가 어디 iTextSharp 그것이 이미지를 렌더링 해야하는지 또는 iTextSharp 제한입니다 알려주지 못하는 경우에 알 수 있다면. iTextSharp와 직접 인쇄 alt text http://img710.imageshack.us/img710/4199/sshot2y.png

이미지가

alt text http://img231.imageshack.us/img231/3610/sshot1z.png

이미지 편집 :

  Dim para As Paragraph = New Paragraph 
      para.Alignment = Image.RIGHT_ALIGN 
      para.Add(text) 

      Dim imageFile As String = String.Format("{0}{1}", GetAppSetting("UploadDirectory"), myCompany.LogoUrl) 

      Dim thisImage As Image = Image.GetInstance(imageFile) 
      thisImage.Alignment = Image.LEFT_ALIGN 

      para.Add(thisImage) 

인쇄 된 이미지는 다음과 같습니다

이미지를 렌더링하는 코드는 다음은 Acrobat 8로 인쇄했습니다.

편집 : 이 로고 이미지는 로고 이미지 그는 사용자 uploades을 원하는대로 업로드 페이지에서로드하고, 나는 다음과 같은 코드를 사용하여 해당 이미지를 확장 :이이 정보를 잃는 원인이되었다

  Dim graph As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(newImage) 

      graph.CompositingMode = Drawing.Drawing2D.CompositingMode.SourceOver 
      graph.CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality 
      graph.InterpolationMode = Drawing.Drawing2D.InterpolationMode.Bicubic 
      graph.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality 
      graph.PixelOffsetMode = Drawing.Drawing2D.PixelOffsetMode.HighQuality 

      graph.DrawImage(newImage, 0, 0, newWidth, newHeight) 

      graph.Dispose() 
      graph = Nothing 

을 그래서 pdf에 인쇄했을 때 정보가 손실되는 것은 매우 두드러졌습니다. 왜냐하면 iTextSharp가 내가 입력 한 크기 조정에 상관없이 iTextSharp가 그 이상으로 크게 드로잉했기 때문입니다. 그래서 이미지를 원래대로 저장하려고했는데 사용자가 200K보다 큰 이미지를 업로드하지 못하도록하고 이미지의 크기를 조정하여 가로 세로 비율을 조정하고 인쇄하기 전에 iTextSharp Image 개체의 크기 조정을 사용했습니다. 이 큰 이미지에 대한 열악한 품질로 인쇄되는 이미지의 문제점을 해결했지만 pdf 문서가 페이지가 깨지거나 페이지에 맞지 않는 등 이상한 점을 보았습니다. 크기가 좋지만 제대로 작동했기 때문입니다. 더 커. alt text http://img38.imageshack.us/img38/5756/sshot3tc.png

편집 2 :

인쇄 할 전송되는 iTextSharp 이미지를 검사, 그것은 ScaleAbsolute를 사용하여 스케일링 후 변경을 보여줍니다, 즉 이유 이 새로운 이미지의 화면 캡처입니다 페이지가 중단됩니다. 그러나 이미지가 성공적으로 크기가 조정 된 것처럼 올바르게 표시되지만 배경 "용지"는 올바르게 표시되지 않습니다. 지금까지 사용 코드는 다음

   Dim imageFile As String = String.Format("{0}{1}", GetAppSetting("UploadDirectory"), myCompany.LogoUrl) 

희미한 thisImage 이미지 = Image.GetInstance (imageFile) thisImage.Alignment = Image.LEFT_ALIGN

  Dim newWidth As Integer = myCompany.LogoWidth 
      Dim newHeight As Integer = myCompany.LogoHeight 
      ResizeImageToMaxValues(newWidth, newHeight) 
      thisImage.ScaleAbsolute(newWidth, newHeight) 

      para.Add(thisImage) 

      pdf.PdfDocument.Add(para) 

메소드 ResizeImage은() 할 것처럼 종횡비를 고려한 폭 및 높이의 크기 조정 및 최대 폭 및 최대 높이 제한 유지.

자세한 정보를 제공해야하는지 알려주세요. 감사합니다

+0

내 첫번째 생각은이 해상도 문제가 있음을 것이라고 나는 파일에서 이미지를 생성하고 크기를 설정하면, I itextSharp가 정교한 품질로 렌더링해야하는 것보다 적은 해상도로 만들어 지므로 잘못하고 있습니다. 그러나 나는 당신이 무엇을 생각하는지 알고 싶습니다. – Sebastian

답변

5

나는 또한 매우 선명하고 깨끗한 이미지를 iTextSharp 렌더링과 좋은 경험을 가지고 있습니다. 나는 이미지를 문서에 직접 추가하고 단락에 먼저 추가하는 방법을 시도했다. 두 가지 모두 매우 명확한 결과를 제공합니다.

Dim document As Document = New Document(pSize, 20, 20, 20, 20) 
PdfWriter.GetInstance(document, New FileStream(myPath & "Test.pdf", FileMode.Create)) 
document.Open() 

Dim png As Image = Image.GetInstance(myPath & "myImageFile.png") 
document.Add(png) 

Dim pgr As New Paragraph 
pgr.Add(png) 
document.Add(pgr) 
document.Close() 

당신이 iTextSharp에서 이미지를 검색 할 때 그것은 정확한 동일 것이 확실 나는 일반적으로 이미지를 .png를 사용하지만 나는 등 JPEG, GIF와 같은 성공을 거두었습니다 Acrobat에있을 때 검색하는 이미지? ,

또한

Dim imageFile As String=String.Format(..... 

편집 72dpi에서 이미지를 저장, 이미지가 당신이 기대하는 크기로 표시되어 있는지 확인 : exaclty 코드에서 무슨 일이 일어나고 있는지 불분명하기 때문에 물어 . 72 dpi는 iTextSharp가 모든 것 (이미지, 여백 등)에 사용하는 것입니다. 그런 식으로, 100px x 100px 이미지가 PDF 문서에 100x100으로 표시됩니다. 크기 조정이나 크기 조정에 대해 걱정할 필요가 없습니다. 이미지를 확대/축소 (위 또는 아래로) 할 때마다 앨리어싱 인공물 (흐림)이 발생할 위험이 있습니다.

+0

iTextSharp에서 사용하고있는 것은 크기가 조정 된 것이기 때문에 동일한 이미지가 아니었다. 위의 내용을 변경했다. 감사합니다 +1 – Sebastian

1

그건 이상합니다.나는 나의 pdf 파일에 슈퍼 선명한 이미지를 얻는다. 내가하는 일과 가지고있는 일에는 약간의 차이가 있습니다. 내 이미지는 내가 전화를 맞게 너무 큰 있기 때문에, 또한

Image instance = Image.GetInstance(System.Drawing.Image.FromFile(pathToImage), Color.WHITE); 

: 예를 들어 나는이 같은 이미지를 만들

instance.ScalePercent(90f); 

또 다른 차이점은 내가 Document하지에 직접 이미지를 추가 할 것입니다 Paragraph으로 바뀌 었습니다.

편집 :

그리고 마지막으로, 내 이미지는 사진과이다.

희망이 있습니다.

+0

@Sebastian, 나는 나의 대답을 업데이트했다. –

+0

고마워요! 나는 그것을보고 있는데, 어떻게되는지 말해 줄게 – Sebastian

2

렌더링을 명확하게 만들려면 이미지를 원본 이미지의 3 배로 만든 다음 ScalePercent 또는 ScaleToFit을 적용하여 특정 크기로 크기를 조정하십시오.

샘플 : 내 옆에

Image logo = Image.GetInstance(pdfReportData.CompanyLogoPath); 
logo.ScaleToFit(175f, 108f); 
document.Add(logo); 
0

는 프린터 설정 었죠!

그래픽을 벡터에서 래스터로 변경하면 이미지가 선명하고 자연 스럽 게 시스템이 느려집니다.

두 번째 솔루션 (FD 덕분에) 그래픽을 Vector로 다시 변경했지만 "이미지 처리"를 최상으로 설정했습니다.

우리는 프린터 문제에서 그렇다하고 RICOH AFICIO MP C2050 PCL 6

6

을 사용하고 있습니다 (위 참조), 귀하의 친구에 의해 3 X 팁은 최종 솔루션이었다.

다시 말하면 이미지를 100x100으로 PDF로 만들려면 이미지가 300px X 300px 이상인지 확인하십시오.

나는 또한 300dpi 이미지를 사용하려고하는데 저품질 이미지로 테스트하지 않았습니다.

이 내 이미지를 추가하는 코드 :

try 
{ 
    string uri = Environment.CurrentDirectory + "/" + "pdfwithimage_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf"; 
    string strImgJpg = Environment.CurrentDirectory + "/HeaderImage.jpg"; 

    Image imgJpg = Image.GetInstance(System.Drawing.Image.FromFile(strImgJpg), new BaseColor(System.Drawing.Color.White)); 

    using (Document pdf = new Document(PageSize.A4, 20, 20, 20, 20)) 
    { 
     if (pdf == null) 
     { 
      throw new NullReferenceException("PDF has not been instanciated"); 
     } 

     if (File.Exists(uri)) 
     { 
      File.Delete(uri); 
     } 

     using (PdfWriter pdfwriter = PdfWriter.GetInstance(pdf, new FileStream(uri, FileMode.Create))) 
     { 
      pdf.Open(); 

      imgJpg.SetDpi(300, 300); 

      imgJpg.ScaleToFit(100f, 100f); 

      pdf.Add(imgJpg); 

      pdf.Close(); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.ToString()); 
    Console.ReadLine(); 
} 
+0

SetDpi (300,300)는 나를 위해 완벽하게 작동했습니다. –

0

를 사용하여 더 큰 PNG 이미지와 iTextSharp보다하면 크기를 변경합니다.

logoImage.ScalePercent(24f); 
0

동일한 문제가 발생했습니다. 압축을 해제하여 문제를 해결할 수있었습니다. 생성하는 내 pdf 파일은 너무 커서 파일 크기가 너무 비싸지 않았습니다.

var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, stream); 
writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_7); 
writer.CompressionLevel = PdfStream.NO_COMPRESSION; 
1

트릭은 큰 이미지를 사용하고 크기를 줄이는 것입니다. 눈금이 설정되어 있지 않고 이미지의 자연적인 크기 인 경우 화질이 떨어집니다. 배율을 낮추고 이미지가 자연 크기보다 작게 표시되면 품질이 향상됩니다. 7 % 크기 (고품질)까지 확장의

예 :

var logo = Image.GetInstance(RImages.logo_600_icon, BaseColor.WHITE); 
logo.ScalePercent(7); 
var cell = new PdfPCell(logo); 
cell.Border = 0; 
table.AddCell(cell);