iTextSharp – Le misure

iTextSharp Articolo2

Dopo aver creato l’oggetto Document, dobbiamo definire le dimensioni della pagina e i suoi margini. Questo può avvenire implicitamente, come abbiamo visto nel precedente articolo Introduzione al PDF con iTextSharp, oppure utilizzando l’oggetto Rectangle e 4 valori in virgola mobile per i margini, come mostrato di seguito:

Dim pageSize As New Rectangle(216, 720)
Dim doc As New Document(pageSize, 36, 72, 108, 180)

In questo esempio, è stato creato un rettangolo che misura 216×720 unità. Questo rettangolo viene utilizzato come argomento nel costruttore dell’oggetto Document, per dare una dimensione alla pagina, insieme al margine sinistro 36 unità, al margine destro 72 unità, al margine superiore 108 unità e al margine inferiore di 180 unità.

Qual’è l’unità di misura dei documenti PDF? Le misure in PDF sono espressi in unità di spazio utente. L’unità spazio utente (1/72 di pollice) è approssimativamente la stessa di un punto (pt), un’unità ampiamente utilizzata nel settore della stampa.

In breve, 1 pollice = 25,4 mm = 72 unità utente (che corrisponde grosso modo a 72 pt).

Se apriamo il documento PDF, creato dall’esempio sopra, con Adobe Reader, dalle proprietà del documento vediamo che misura 76,2 mm x 254 mm.

itextSharp ha anche creato il margine sinistro di 12,7 mm, un margine destro di 1 in 25,4 mm, un margine superiore 38,1 mm e un margine inferiore di 63,5 mm.

Se la matematica non è il nostro forte, c’è una classe di utilità in iTextSharp (Utilities) con metodi statici che consentono di passare tra punti, pollici e millimetri: millimetersToPoins(), millimetersToInches(), pointsToMillimeters(), pointsToInches(), inchesToMillimeters() e InchesToPoints().

Tutti questi metodi come argomento accettano un valore in virgola mobile.

Questi metodi si riferiscono ai punti, non a unità. Questo perché i punti (pt) possiamo dire che corrispondono con le unità.

Per completezza di seguito il codice dell’esempio riportato sopra, con i metodi di conversione a millimetri:

Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.text.Utilities
Public Class HelloWorldStretto
    Private Shared DEST As String = Environment.CurrentDirectory & "\HelloWorldStretto.pdf"

    Public Shared Sub main()
        ' Converto le misure della pagina da Millimetri in Punti
        Dim pageWidth As Single = MillimetersToPoints(76)
        Dim pageHeight As Single = MillimetersToPoints(254)
        ' Creo l'area della pagina
        Dim pageSize As New Rectangle(pageWidth, pageHeight)
        ' Converto le misure dei margini da millimetri in Punti
        Dim margLeft As Single = MillimetersToPoints(12)
        Dim margRight As Single = MillimetersToPoints(25)
        Dim margTop As Single = MillimetersToPoints(38)
        Dim margBottom As Single = MillimetersToPoints(63)
        ' Creo il documento, con il formato pagina e i margini
        Dim doc As New Document(pageSize, margLeft, margRight, margTop, margBottom)

        PdfWriter.GetInstance(doc, New FileStream(DEST, FileMode.Create))
        doc.Open()
        doc.Add(New Paragraph("Hello World Stretto!"))
        doc.Close()
    End Sub
End Class

E’ possibile variare la dimensione predefinita dell’unità utente, con la proprietà a sola scrittura Userunit riferito all’istanza ricevuta con la classe PdfWriter e il metodo GetInstance(). Negli esempi precedenti, noi non abbiamo conservato tale istanza in una variabile, perché non usata, ma se scrivessimo:

Dim writer As PdfWriter = PdfWriter.GetInstance(doc, New FileStream(DEST, FileMode.Create))
writer.setUserunit(75000)

Avremmo variato la nostra unità utente, che non varrebbe più 1 pt ma 75000 pt.

Written by 

1 thought on “iTextSharp – Le misure

  1. Gοod day! I knoԝ this is kinda off topic but I wаs wοndering if you knew where I could gеt a
    captcha plugіn for my comment form? I’m using tһe same blog platform as yours and I’m having
    problems finding one? Thanks a lot!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.