Itextsharp e problemi rotazione pdf

lunedì 18 febbraio 2013 - 15.10
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Visual Studio 2010

wooler Profilo | Newbie

Salve a tutti, mi presento, sono Wooler e di tanto in tanto mi diletto nella programmazione VB.
In questi giorni ho buttato giù un pò di codice per sostituire un vecchio programma linux che usavamo in ditta per convertire automaticamente dei file in postscript in pdf.
La procedura consisteva nel creare un secondo file ps per l'aggiunta del nome utente di creazione del file e della data di creazione dello stesso. Quindi questo file veniva unito al primo creando un ps unico con le informazioni di cui sopra nell'intestazione. Quindi veniva trasformato in pdf.

Per fare tutto ciò ho lavorato con itextsharp e devo dire che sono rimasto molto soddisfatto dei risultati ottenuti. L'unico problema che ho è per documenti con più pagine.
In VB ho dovuto inizialmente convertire il ps in pdf, quindi leggerlo con la libreria itextsharp e poi creare un terzo pdf dove trasferire pagina per pagina e inserire i dati dell'utente di creazione.
Il problema si genera nella creazione della seconda pagina perchè il foglio si genera in landscape e la pagina viene incollata in portrait, o viceversa...
non riesco a venirne fuori, qualcuno riesce ad aiutarmi?
Vi allego parte del codice:


'lettura degli attributi
Datafile = FileDateTime(Cartellacontrollo & Filecontrollo)
Estensionefile = System.IO.Path.GetExtension(Filecontrollo)
If Estensionefile <> ".plt" And Estensionefile <> ".PLT" And Estensionefile <> "" Then GoTo fine
'lettura del proprietario del file
Dim fi As New FileInfo(Cartellacontrollo & Filecontrollo)
Dim fs As AccessControl.FileSecurity = fi.GetAccessControl()
Dim Padronefile As NTAccount = CType(fs.GetOwner(GetType(NTAccount)), NTAccount)
'rimozione dal nome del proprietario del dominio
Proprietario = Mid(Padronefile.ToString, 10, Len(Padronefile.ToString))
inizio:
'stringa di esecuzione per la trasformazione dei file plt/ps in pdf ----> ATTENZIONE: SE IL FILE CONTIENE UNO SPAZIO NON VIENE TRASFORMATO
Shell(Gostscript & " -dNOPAUSE -dBATCH -dNOPROMPT -sOutputFile=" & Cartellacontrollo & Mid(Filecontrollo, 1, Len(Filecontrollo) - Len(Estensionefile)) & ".PDF -sDEVICE=pdfwrite " & Cartellacontrollo & Filecontrollo, AppWinStyle.Hide) 'trasformo il file ps in pdf
Pausa(2)

Dim pagenumber, orientamento As Integer
pagenumber = 1

'dimensionamento del reader = file pdf di origine
Dim reader As PdfReader '(Cartellacontrollo & Mid(Filecontrollo, 1, Len(Filecontrollo) - Len(Estensionefile)) & ".PDF")
Dim documento As iTextSharp.text.Document = Nothing
Dim Paragrafo As Paragraph

reader = New PdfReader(Cartellacontrollo & Mid(Filecontrollo, 1, Len(Filecontrollo) - Len(Estensionefile)) & ".PDF")

documento = New iTextSharp.text.Document(reader.GetPageSizeWithRotation(pagenumber), 0, 0, 6, 0) 'margini: sx,dx,up,down

Dim writer As iTextSharp.text.pdf.PdfWriter = Nothing
Dim ws As New FileStream(Cartellacontrollo & Mid(Filecontrollo, 1, Len(Filecontrollo) - Len(Estensionefile)) & "new.PDF", FileMode.Create, FileAccess.Write)
writer = PdfWriter.GetInstance(documento, ws)

Dim Carattere As iTextSharp.text.Font
Carattere = FontFactory.GetFont(FontFactory.HELVETICA, 8, Font.Bold, BaseColor.BLACK)

documento.Open()
Dim cb As PdfContentByte = writer.DirectContent
Dim pagina As PdfImportedPage

While pagenumber <= reader.NumberOfPages
documento.NewPage()
pagina = writer.GetImportedPage(reader, pagenumber) 'importo la pagina dal file pdf sorgente

orientamento = reader.GetPageRotation(pagenumber) 'verifico l'orientamento perchè se il reader è in landscape la pagina viene incollata in portrait tagliandone una parte
If orientamento = 90 OrElse orientamento = 270 Then 'pagina in landscape

documento.SetPageSize(PageSize.A4_LANDSCAPE)

cb.AddTemplate(pagina, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(pagenumber).Height)


Else 'pagina in portrait
cb.AddTemplate(pagina, 1.0F, 0, 0, 1.0F, 0, 0)
End If

Paragrafo = New Paragraph(0, "Codice: " & Mid(Filecontrollo, 1, Len(Filecontrollo) - Len(Estensionefile)) & " Riferimento: " & Proprietario & " Data/Ora: " & Datafile, Carattere)
Paragrafo.Alignment = Element.ALIGN_CENTER
documento.Add(Paragrafo)
pagenumber = pagenumber + 1
End While
documento.Close()
reader.Close()


Mentre aspettavo ho trovato la risposta al mio problema.
mi è bastato sostituire la riga -documento.setpagesize(pagesize.a4_landscape) con -documento.setpagesize(itextsharp.text.pagesize.a4.rotate)

Grazie comunque a tutti e scusate del disturbo.

Wooler

freeteo Profilo | Guru

>Mentre aspettavo ho trovato la risposta al mio problema.
>mi è bastato sostituire la riga -documento.setpagesize(pagesize.a4_landscape)
>con -documento.setpagesize(itextsharp.text.pagesize.a4.rotate)
>
>Grazie comunque a tutti e scusate del disturbo.
>Wooler
Grazie a te Wooler per aver postato la soluzione, così può tornare utile anche ad altri in futuro.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5