Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
Crystal Reports e reportistica
Itextsharp e problemi rotazione pdf
lunedì 18 febbraio 2013 - 15.10
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 4.0
|
Visual Studio 2010
wooler
Profilo
| Newbie
1
messaggi | Data Invio:
lun 18 feb 2013 - 15:10
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
6.542
messaggi | Data Invio:
dom 21 apr 2013 - 17:03
>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
Torna su
Stanze Forum
Elenco Threads
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 !