2013-06-06 14 views
5

Próbuję umieścić wysokiej jakości obrazy w formacie PDF (po jednym na stronę). Ale jeśli ustawię rozmiar strony na a4, muszę zmienić rozmiar moich zdjęć, ponieważ są zbyt duże. Wtedy tracą swoją jakość. Czy istnieje sposób na umieszczenie dużego obrazu na stronie a4 bez utraty jakości?C# obrazy w wysokiej rozdzielczości w PDF

używam biblioteki iTextSharp, najpierw tworzę dokument

document = new Document(PageSize.A4, 0, 0, 0, 0); 
FileStream output = new FileStream(pdfPath + "document.pdf", FileMode.Create); 
PdfWriter writer = PdfWriter.GetInstance(document, output); 
document.Open(); 

następnie Dodaję każde zdjęcie

document.Add(iTextSharp.text.Image.GetInstance(toSaveImage, System.Drawing.Imaging.ImageFormat.Tiff)); 

i zamykanie dokumentu

document.Close(); 
+1

Zwiększyć DPI pliku PDF? – spender

+0

coś takiego ... ale jak mogę to zrobić? –

+0

Nie wiem, ponieważ twoje pytanie jest tylko trochę odległe. Jak robisz swój PDF? Jak "wkładasz" swoje obrazy? Z jakich bibliotek korzystasz? Edytuj swoje pytanie, podaj kod i ktoś może Ci pomóc. – spender

Odpowiedz

5

Najpierw pozwól mi wyjaśnić kilka nieporozumień:

  • Dokument PDF nie ma rozdzielczości. Komentarz wydawcy był błędny. Nie ma czegoś takiego jak DPI w PDF. Rozdzielczość wchodzi w grę tylko wtedy, gdy plik PDF jest renderowany (na ekran, na papier, ...) i dlatego w przeglądarce plików PDF może występować DPI (ale to coś zupełnie innego).
  • podczas skalowania obiektu Image w iTextSharp, nie tracisz żadnych informacji: liczba pikseli pozostaje taka sama. Podczas gdy PDF nie ma rozdzielczości, obrazy wewnątrz pliku PDF. Po zmniejszeniu obrazu (tzn. Po umieszczeniu tej samej liczby pikseli na mniejszym płótnie) rozdzielczość wzrasta; podczas skalowania rozdzielczość maleje.

teraz na pytanie: nie jesteś zobowiązany do tworzenia stron A4:

Image img = 
    iTextSharp.text.Image.GetInstance(toSaveImage, 
     System.Drawing.Imaging.ImageFormat.Tiff); 
Rectangle pagesize = new Rectangle(img.ScaledWidth, img.ScaledHeight); 
Document document = new Document(pagesize); 
img.SetAbsolutePosition(0, 0); 
document.Add(img); 

stworzyłem Document podstawie przeskalowane wymiary obrazu. Nie pozwól, aby nazwy metod wprowadzały Cię w błąd: ScaledWidth i ScaledHeight są najbezpieczniejszymi metodami używanymi podczas uzyskiwania wymiarów Image. Obejmują one nie tylko operacje skalowania, które można wykonać na obrazie, ale także uwzględniają przestrzeń potrzebną na obraz po obróceniu go.

Ustawiłem bezwzględną pozycję w lewym dolnym rogu. To bezpieczniejsze niż ustawienie marginesów wydruku 0.

EDIT: Jeśli nie chcesz, aby zmienić rozmiar strony, wtedy trzeba zastosować metodę ScaleToFit():

Image img = 
    iTextSharp.text.Image.GetInstance(toSaveImage, 
     System.Drawing.Imaging.ImageFormat.Tiff); 
img.ScaleToFit(PageSize.A4); 

Należy zauważyć, że metoda Skalowanie w celu dopasowania do obiektu Rectangle zostało wprowadzone w jednej z najnowszych wersji iTextSharp. Alternatywą byłoby użycie metody ScaleToFit(), która wymaga szerokości i wysokości prostokąta.

+0

ok, ale używam stron a4, ponieważ jeśli nie, moja drukarka wydrukowałaby tylko części stron. Wiem, że mogę to zmienić w ustawieniach drukarek, ale dokumenty PDF utworzone przez mój program będą drukowane na wielu drukarkach i nie chcę, aby każdy, kto drukuje mój dokument, musiał zmienić ustawienia swojej drukarki ... jak mogę to osiągnąć? to? –

+0

Dostosowałem odpowiedź. –

+0

To wszystko! Dziękuję Ci ;) –

Powiązane problemy