如何在asp.net中使用componentone c1printdocument来读取文本文件并转换成格式的pdf?

时间:2014-03-25 18:12:06

标签: pdf componentone

我正在使用C1PrintDocument类来读取文本文件并在web中转换为pdf。实际上它转换为pdf但没有像文本文件中那样的格式。 例如。我有一个只有一页的文本文件。但它转换成pdf时会分成两页。以下是我使用的代码。

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

1 个答案:

答案 0 :(得分:0)

请尝试使用c1PrintDocument1.Export(“filename.pdf”,true)。

谢谢, Richa