2013-06-06 4 views
5

Ich versuche, qualitativ hochwertige Bilder in PDF (eins pro Seite) zu stellen. Aber wenn ich die Seitengröße auf a4 setze, muss ich die Größe meiner Bilder ändern, weil sie zu groß sind. Dann verlieren sie ihre Qualität. Gibt es eine Möglichkeit, ein großes Bild auf a4-Seite zu bringen, ohne die Qualität zu verlieren?C# hochauflösende Bilder in PDF

Ich verwende iTextSharp Bibliothek zunächst bin ich zu schaffen, das 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(); 

dann Addieren jedes Bild ich

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

und Schließen des Dokuments

document.Close(); 
+1

Erhöhen Sie die DPI Ihrer PDF? – spender

+0

so etwas ... aber wie kann ich das machen? –

+0

Ich weiß es nicht, weil Ihre Frage nur knapp vor einem Downvote steht. Wie machst du dein PDF? Wie setzt du deine Bilder in Szene? Welche Bibliotheken benutzen Sie? Bearbeiten Sie Ihre Frage, geben Sie einen Code ein und jemand könnte Ihnen helfen. – spender

Antwort

5

Lassen Sie mich zuerst ein paar Missverständnisse klären:

  • ein PDF-Dokument hat keine Auflösung. Der Kommentar von Spender war falsch. Es gibt keine DPI in PDF. Die Auflösung kommt nur dann zum Tragen, wenn ein PDF gerendert wird (auf den Bildschirm, auf Papier, ...) und deshalb ein DPI in einem PDF-Viewer vorhanden sein kann (aber das ist etwas völlig anderes).
  • Wenn Sie ein Image Objekt in iTextSharp skalieren, verlieren Sie keine Informationen: Die Anzahl der Pixel bleibt gleich. Während PDF keine Auflösung hat, tun die Bilder in einer PDF. Wenn Sie das Bild verkleinern (das heißt: Sie legen die gleiche Anzahl von Pixeln auf eine kleinere Leinwand), erhöht sich die Auflösung; Wenn Sie den Maßstab vergrößern, verringert sich die Auflösung.

Jetzt für Ihre Frage: Sie sind nicht verpflichtet, DIN A4-Seiten zu erstellen:

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); 

ich die Document erstellt auf der Grundlage der skalierten Dimensionen des Bildes. Lassen Sie sich von den Methodennamen nicht irreführen: ScaledWidth und ScaledHeight sind die sichersten Methoden, wenn Sie die Abmessungen eines Image erhalten. Sie enthalten nicht nur Skalierungsoperationen, die Sie möglicherweise auf dem Bild ausgeführt haben, sondern berücksichtigen auch den Platz, den das Bild nach dem Drehen benötigt.

Ich habe die absolute Position in der unteren linken Ecke festgelegt. Das ist sicherer als die Einstellung der Seitenränder auf 0

EDIT: Wenn Sie nicht über die Seitengröße ändern möchten, dann müssen Sie die ScaleToFit() Methode verwenden:

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

Beachten Sie, dass das Verfahren Die Anpassung an ein Rectangle-Objekt wurde in einer der neuesten iTextSharp-Versionen eingeführt. Eine Alternative wäre die Methode ScaleToFit(), die die Breite und die Höhe des Rechtecks ​​erfordert.

+0

ok, aber ich benutze a4 Seiten, denn wenn ich nicht, würde mein Drucker nur Teile von Seiten drucken. Ich weiß, dass ich es in den Druckereinstellungen ändern kann, aber von meinem Programm erstellte PDF-Dokumente werden auf vielen Druckern gedruckt, und ich möchte nicht, dass jeder, der mein Dokument druckt, seine Druckereinstellungen ändern muss ... wie kann ich erreichen es? –

+0

Ich habe die Antwort angepasst. –

+0

Das war's! Danke ;) –