IMPRIMIR EM PDF DOM PDFSHARP NO VB.NET

BIGLYON 06/02/2017 14:50:40
#471411
Boa tarde,

Estou imprimindo um arquivo texto em pdf, só não consigo começar uma página nova. ex. meu arquivo tem 5 paginas e imprime somente em uma. Segue o código.

Imports System.IO
Imports PdfSharp
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim line As String
Dim readFile As System.IO.TextReader = New StreamReader([Ô]c:    emp\c0202022017154926.txt[Ô])
Dim yPoint As Integer = 0
Dim pdf As PdfDocument = New PdfDocument
pdf.Info.Title = [Ô]Text File to PDF[Ô]
Dim pdfPage As PdfPage = pdf.AddPage
Dim graph As XGraphics = XGraphics.FromPdfPage(pdfPage)
Dim font As XFont = New XFont([Ô]Lucida Console[Ô], 9, XFontStyle.Regular)
[ô]pdfPage.Orientation = PageOrientation.Landscape
[ô]pdfPage.Size = PageSize.A4

While True
line = readFile.ReadLine()
If line Is Nothing Then
Exit While
Else
If yPoint < 580 Then
pdfPage.Orientation = PageOrientation.Landscape
pdfPage.Size = PageSize.A4
graph.DrawString(line, font, XBrushes.Black, _
New XRect(40, yPoint, pdfPage.Width.Point, pdfPage.Height.Point), XStringFormats.TopLeft)
yPoint = yPoint + 10
Else
yPoint = yPoint + 10
End If
End If
End While

Dim pdfFilename As String = [Ô]txttopdf.pdf[Ô]
pdf.Save(pdfFilename)
readFile.Close()
readFile = Nothing
Process.Start(pdfFilename)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
PERCIFILHO 06/02/2017 15:08:54
#471414
Citação:

Dim PdfPage pdfPage = pdf.AddPage();


Esse é o comando para inserir uma página. é só colocar onde vai começar a nova página:
pdfPage = pdf.AddPage();

BIGLYON 06/02/2017 16:23:10
#471417
Boa tarde PERCIFILHO,

Sim, eu já havia testado, mas ocorre o problema da imagem do anexo. Imprime todas as páginas mas dados somente na primeira.

Imports System.IO
Imports PdfSharp
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim line As String
Dim readFile As System.IO.TextReader = New StreamReader([Ô]c:    emp\c0202022017154926.txt[Ô])
Dim yPoint As Integer = 0
Dim pdf As PdfDocument = New PdfDocument
pdf.Info.Title = [Ô]Text File to PDF[Ô]
Dim pdfPage As PdfPage = pdf.AddPage()
Dim graph As XGraphics = XGraphics.FromPdfPage(pdfPage)
Dim font As XFont = New XFont([Ô]Lucida Console[Ô], 9, XFontStyle.Regular)
[ô]pdfPage.Orientation = PageOrientation.Landscape
[ô]pdfPage.Size = PageSize.A4

While True
line = readFile.ReadLine()
If line Is Nothing Then
Exit While
Else
If yPoint < 580 Then
pdfPage.Orientation = PageOrientation.Landscape
pdfPage.Size = PageSize.A4
graph.DrawString(line, font, XBrushes.Black, _
New XRect(40, yPoint, pdfPage.Width.Point, pdfPage.Height.Point), XStringFormats.TopLeft)
yPoint = yPoint + 10
Else
yPoint = 0 <------ aqui zerando ou não a diferença é que imprime
tudo na primeira pagina, ou somente uma página, as demais ficam em branco
pdfPage = pdf.AddPage()
End If
End If
End While

Dim pdfFilename As String = [Ô]txttopdf.pdf[Ô]
pdf.Save(pdfFilename)
readFile.Close()
readFile = Nothing
Process.Start(pdfFilename)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
OCELOT 06/02/2017 17:08:43
#471424
Resposta escolhida
Isso é porque o objeto graph ainda é o da página anterior, você precisa de um novo dele também. Eu testaria assim

pdfPage.Orientation = PageOrientation.Landscape
pdfPage.Size = PageSize.A4

While True
line = readFile.ReadLine()
If line Is Nothing Then
Exit While
Else
If yPoint > 570 Then
yPoint = 0
pdfPage = pdf.AddPage()
graph = XGraphics.FromPdfPage(pdfPage)
pdfPage.Orientation = PageOrientation.Landscape
pdfPage.Size = PageSize.A4
End If
graph.DrawString(line, font, XBrushes.Black, _
New XRect(40, yPoint, pdfPage.Width.Point, pdfPage.Height.Point), XStringFormats.TopLeft)
yPoint = yPoint + 10
End If
End While


Repare que inverti o seu IF, pois da forma como estava ele iria pular uma linha quando entrasse nele, e também movi o que altera a orientação e o tamanho da página para dentro dele, descomentando os que estavam fora, pois só deve ser necessário alterar isso uma vez por página
MARCOSLING 06/02/2017 22:55:08
#471455
Se vc utilizar as classes do MigraDoc (que faz parte do PdfSharp), a quebra de página é automática.
BIGLYON 07/02/2017 07:28:02
#471457
Bom dia OCELOT,

Muito obrigado, funcionou perfeitamente, só pequenos ajustes agora de linhas por página.
Havia tentado n possibilidades e como é a primeira fez que utilizo o componente não sabia seu funcionamento.
Tópico encerrado , respostas não são mais permitidas