1

I am using the C1PrintDocument class to read a text file and convert into pdf in web. Actually it converts into pdf but without the format as like in text file. For eg. I have a text file which has only one page. But it makes into two pages while convert into pdf. Below is the code what I use.

Imports System.IO
Imports C1.C1Preview
Imports C1.C1Pdf
Imports C1.Web.Wijmo.Controls.C1ReportViewer
Imports System.Runtime.Serialization.Formatters.Binary
Imports C1.C1Pdf.PdfDocumentInfo
Imports C1.C1Preview.C1PrintDocument

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
Handles        Me.Load
    Try
        Dim strmappath As String = System.Web.HttpContext.Current.Server.MapPath("~")

        Dim filename As String

        filename = Path.Combine(Server.MapPath("~"), "12214.txt")

        Dim sr As New System.IO.StreamReader(filename, System.Text.Encoding.UTF8)

        Dim str As [String] = sr.ReadToEnd()

        Dim doc1 As C1PrintDocument = C1ReportViewer.CreateC1PrintDocument()

        Dim doc As New C1PrintDocument

        doc.Pages(1).PageSettings.TopMargin = 0
        doc.Pages(1).PageSettings.LeftMargin = 0
        doc.Pages(1).PageSettings.RightMargin = 0

        doc.StartDoc()

        Dim overlay As New RenderArea()
        overlay.Width = "100%"
        overlay.Height = "100%"
        overlay.Style.Borders.All = LineDef.Default
        doc.PageLayout.Overlay = overlay


        Dim lines As String() = System.IO.File.ReadAllLines(filename)
        Dim linecnt As Integer = System.IO.File.ReadLines(filename).Count

        Dim strpages1 As String()
        ReDim strpages1(Math.Abs(linecnt / 66) - 1)

        Dim intcnt As Integer
        Dim intlinereadcnt As Integer
        intlinereadcnt = 0
        intcnt = 0
        intlinereadcnt = 0

        For Each line In lines

            If intcnt <= 66 Then
                If intcnt <> 66 Then
                    strpages1(intlinereadcnt) = strpages1(intlinereadcnt) & 
                                                line &       vbCrLf
                End If

                intcnt = intcnt + 1
            ElseIf intcnt = 67 Then
                intlinereadcnt = intlinereadcnt + 1
                intcnt = 0
            End If
        Next

        Dim strPages As String() = str.Split(Chr(12))
        Dim strPage As String = String.Empty
        Dim txtPage As New C1.C1Preview.RenderText(doc)



        With doc
            .AllowNonReflowableDocs = True

            For Each strPage In strpages1
                If strPage.Length > 0 Then

                    txtPage.Text = strPage
                    txtPage.X = 150

                    doc.Style.TextColor = Drawing.Color.Blue


                    .RenderBlockText(txtPage.Text)

                    .Style.WordWrapMode = False

                    .NewPage()

                End If
            Next
        End With

        Dim m_pdfExporter As C1.C1Preview.Export.PdfExporter
        m_pdfExporter =  C1.C1Preview.Export.ExportProviders.
                         PdfExportProvider.NewExporter()


        m_pdfExporter.Document = doc

        m_pdfExporter.Export(Server.MapPath("~") & "12214" & ".pdf")


        Dim sr2 As System.IO.MemoryStream

        sr2 = New MemoryStream

        doc.Save(sr2)


        Dim biteArray As Byte() = New Byte(sr2.Length - 1) {}
        sr2.Position = 0
        sr2.Read(biteArray, 0, CInt(sr2.Length))

        'm_pdfExporter.Export(Path.GetTempPath & "\" & "12214" & ".pdf")

        Response.Clear()
        Response.Charset = ""
        Response.Cache.SetCacheability(HttpCacheability.NoCache)

        Response.ContentType = "application/pdf"
        'Response.BinaryWrite(biteArray)
        Response.AddHeader("Content-Disposition", "attachment;filename=" & "12214" & ".pdf")
        Response.BinaryWrite(System.IO.File.ReadAllBytes(Server.MapPath("~") & "12214" & ".pdf"))

    Catch ex As Exception

    End Try
End Sub
karthik
  • 105
  • 2
  • 15

1 Answers1

0

Try using c1PrintDocument1.Export("filename.pdf", true) instead.

Thanks, Richa

Richa
  • 69
  • 3