2013-06-06 24 views
5

sto cercando di mettere immagini di alta qualità in formato PDF (uno per pagina). Ma se imposto la dimensione della pagina su a4, devo ridimensionare le mie immagini, perché sono troppo grandi. Quindi perdono la loro qualità. C'è un modo per mettere la grande immagine su una pagina a4 senza perdere la qualità?C# immagini ad alta risoluzione in formato PDF

sto usando biblioteca iTextSharp, in primo luogo sto creando il documento

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

quindi sto aggiungendo ogni immagine

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

e chiudere il documento

document.Close(); 
+1

Aumentare il DPI del PDF? – spender

+0

qualcosa del genere ... ma come posso farlo? –

+0

Non so perché la tua domanda cade solo un po 'meno di un downvote. Come stai facendo il tuo PDF? Come stai "metti" le tue immagini? Quali librerie stai usando? Modifica la tua domanda, fornisci del codice e qualcuno potrebbe essere in grado di aiutarti. – spender

risposta

5

Per prima cosa chiarisco un paio di equivoci:

  • un documento PDF non dispone di una risoluzione. Il commento di spender era sbagliato. Non esiste DPI come PDF. La risoluzione entra in gioco solo quando viene eseguito il rendering di un PDF (su schermo, su carta, ...) ed è per questo che potrebbe esserci un DPI in un visualizzatore PDF (ma è qualcosa di completamente diverso).
  • quando si scala un oggetto Image in iTextSharp, non si perde alcuna informazione: il numero di pixel rimane lo stesso. Mentre il PDF non ha una risoluzione, le immagini all'interno di un PDF fanno. Quando riduci la risoluzione dell'immagine (ovvero: metti lo stesso numero di pixel su una tela più piccola), la risoluzione aumenta; quando si scala, la risoluzione diminuisce.

Ora per la tua domanda: non siete obbligati a creare pagine in formato 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); 

ho creato il Document in base alle dimensioni in scala dell'immagine. Non lasciate che i nomi dei metodi che si sviano: ScaledWidth e ScaledHeight sono i metodi più sicuri da utilizzare quando ottenere le dimensioni di un Image. Non solo comprendono le operazioni di ridimensionamento, è possibile che siano state eseguite sull'immagine, ma tengono anche conto dello spazio necessario per l'immagine dopo averlo ruotato.

ho impostato la posizione assoluta verso l'angolo in basso a sinistra. Questo è più sicuro di impostare i margini della pagina a 0.

EDIT: Se non si desidera modificare le dimensioni della pagina, quindi è necessario utilizzare il metodo ScaleToFit():

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

Si noti che il metodo scalare per adattarsi ad un oggetto Rectangle è stato introdotto in una delle ultime versioni di iTextSharp. Un'alternativa sarebbe utilizzare il metodo ScaleToFit() che richiede la larghezza e l'altezza del rettangolo.

+0

ok, ma sto usando pagine a4, perché se non lo faccio, la mia stampante stamperebbe solo parti di pagine. So che posso cambiarlo nelle impostazioni della stampante, ma i documenti PDF creati dal mio programma verranno stampati su molte stampanti, e non voglio che tutti quelli che stampano il mio documento debbano cambiare le impostazioni della stampante ... come posso ottenere vero? –

+0

Ho adattato la risposta. –

+0

Ecco fatto! Grazie ;) –

Problemi correlati