Экспорт данных в pdf - PullRequest
5 голосов
/ 22 мая 2009

как я могу экспортировать данные, показанные в DBgrid, в файл PDF?

Ответы [ 5 ]

7 голосов
/ 22 мая 2009

Что ж, данные, отображаемые в DBGrid, предоставляются набором данных, прикрепленным к этой dbgrid, поэтому экспорт данных из DBGrid в PDF означает экспорт данных из вашего набора данных в PDF.

Самый простой вариант - использовать инструмент отчетности. Для Delphi доступно множество различных инструментов отчетности, например, Rave Report, FastReport, построитель отчетов, QuickReport и т. Д.

Такие инструменты позволяют создавать отчет для печати на основе ваших данных и позволяют либо распечатать отчет, либо экспортировать его в форматы, такие как HTML, DOC, PDF и т. Д. Rave Report поставляется с Delphi, и вы можете использовать его бесплатно. Мне лично нравится FastReport и я использую его в своих приложениях.

Другой вариант заключается в том, что если в целевой системе установлен виртуальный принтер PDF, вы можете выбрать его в качестве принтера и использовать класс TPrinter в Delphi для записи непосредственно на холсте принтера, а ваш виртуальный принтер PDF создаст файл PDF для вас, а не распечатывать ваши данные на бумаге.

Третий вариант - использовать сторонние компоненты, которые специально созданы для работы с PDF и позволяют создавать или редактировать файлы PDF в вашем приложении.

Привет

3 голосов
/ 24 мая 2009

Пакет экспорта Scalabium для Delphi (включая 2009) поддерживает множество форматов экспорта, включая PDF и другие офисные форматы с OLE и без него. Компоненты экспорта могут использоваться с потомками TDBGrid и TDataSet.

Может использоваться не визуально, но также предлагает настраиваемые мастера экспорта. Мы успешно используем его при миграции набора приложений с Delphi 7 на 2009 год.

2 голосов
/ 23 мая 2009

попробуйте EMS Advanced Data Export VCL

http://sqlmanager.net/en/products/tools/advancedexport

  • Экспорт данных (наборов данных) в 17 самых популярных форматов: MS Access, MS Excel, MS Word, формат Open XML, формат Open Document (ODF), RTF, HTML, XML, PDF, TXT, DBF, CSV, SYLK, Буфер обмена DIF, LaTeX, SQL и Windows
  • Borland Delphi 5-7, 2005, 2006, CodeGear Delphi 2007, 2009 и Borland C ++ Builder 5-6, поддержка CodeGear C ++ Builder 2007, 2009
  • Экспорт данных Unicode. Ручная настройка кодировки текста для экспортируемых данных (UTF-8, UTF-16 / UCS-2, UTF-32 / UCS-4, Latin1, Latin2, Latin5, Latin7 и более)
  • Сохранение данных для будущего просмотра, изменения, печати или публикации в Интернете
  • Простой в использовании мастер позволяет вашим конечным пользователям быстро экспортировать данные
  • Мощные параметры экспорта для каждого формата данных
  • 100% нативный код Delphi
  • Для работы не требуется никаких дополнительных библиотек или программного обеспечения
  • Подробная справочная система и демонстрационное приложение
  • Мощные компоненты и редакторы свойств
  • Настройка пользовательских форматов для каждого поля отдельно
  • Поддержка мультиязычности
1 голос
/ 24 мая 2009

Вы можете сами перебирать данные и использовать отличный экспорт VCL eDocEngine из Гностицы. Он также подключается к средствам отчетности и другим компонентам.

0 голосов
/ 18 октября 2012
Public Sub ExportDataTableToPDF(ByVal dtImport As DataTable)
    Dim strQuery As String = "select er_num,er_shortd,er_longd,er_severity from mv_error"
    Dim doc As New Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35)
    Try

        '====================================================================
        'Dim str As String = DateTime.Now.ToString("yyyyMMddHHmmssff")
        'Dim sWebSettingPath As String = ConfigurationSettings.AppSettings("ExptLoctPath")
        'Dim str1 As String = "E:\ExportPdf_File"
        'Dim WorkingFile As String
        'Dim s As String
        'If (Directory.Exists(sWebSettingPath)) Then
        '    s = "already exists"
        '    WorkingFile = Path.Combine(sWebSettingPath, "" & str & " DataTestData.pdf")
        'Else
        '    Dim ss As String = "C:\ReportPDF"
        '    WorkingFile = Path.Combine(str1, "" & str & " DataTestData.pdf")
        '    Directory.CreateDirectory(ss)
        'End If


        '====================================================================

        'Folder Exists in Particular folder or not cheak ifnot create a folder
        Dim strDateTime As String = DateTime.Now.ToString("yyyyMMddHHmmssff")
        Dim sWebSettingPath As String = ConfigurationSettings.AppSettings("ExptLoctPath")
        Dim str1 As String = "E:\ExportPdf_File"
        Dim WorkingFile As String
        Dim s As String
        If (Directory.Exists(sWebSettingPath)) Then
            s = "already exists"
            WorkingFile = Path.Combine(sWebSettingPath, "" & strDateTime & "_DataTestData.pdf")
        Else
            Dim sWebStingNotPath As String = "C:\ReportPDFTest"
            Directory.CreateDirectory(sWebStingNotPath)
            WorkingFile = Path.Combine(sWebStingNotPath, "" & strDateTime & " DataTestData.pdf")

        End If
        '====================================================================

        Dim fs As New FileStream(WorkingFile, FileMode.Create, FileAccess.Write, FileShare.None)


        'Create Document class object and set its size to letter and give space left, right, Top, Bottom Margin
        PdfWriter.GetInstance(doc, fs)
        ' Dim wri As PdfWriter = PdfWriter.GetInstance(doc, New FileStream("C:\Documents and Settings\lessly.l\Desktop\iTextSharp\Test11.pdf", FileMode.Create))
        doc.Open()
        'Open Document to write
        Dim font8 As Font = FontFactory.GetFont("ARIAL", 7)

        'Write some content
        Dim paragraph As New Paragraph("Team :: CataPult")

        Dim dt As DataTable = dtImport

        If dt IsNot Nothing Then
            'Craete instance of the pdf table and set the number of column in that table
            Dim PdfTable As New PdfPTable(dt.Columns.Count)


            Dim PdfPCell As PdfPCell = Nothing
            Dim pdfrow As PdfPRow = Nothing


            For column As Integer = 0 To dt.Columns.Count - 1

                PdfTable.HeaderRows = dt.Columns.Count


                PdfPCell = New PdfPCell(New Phrase(New Chunk(dt.Columns(column).Caption.ToString().ToUpper, New Font(Font.HELVETICA, 8.0F, Font.BOLD, Color.WHITE))))
                PdfPCell.BackgroundColor = New Color(System.Drawing.ColorTranslator.FromHtml("#66CCFF"))

                PdfTable.AddCell(PdfPCell)

            Next

            'Each Row Values added

            For rows As Integer = 0 To dt.Rows.Count - 1
                For column As Integer = 0 To dt.Columns.Count - 1
                    PdfTable.HeaderRows = dt.Columns.Count
                    PdfPCell = New PdfPCell(New Phrase(New Chunk(dt.Rows(rows)(column).ToString(), font8)))
                    PdfTable.AddCell(PdfPCell)
                Next
            Next

            PdfTable.SpacingBefore = 15.0F
            ' Give some space after the text or it may overlap the table
            doc.Add(paragraph)
            ' add paragraph to the document
            ' add pdf table to the document
            doc.Add(PdfTable)

        End If
    Catch docEx As DocumentException
        'handle pdf document exception if any
    Catch ioEx As IOException
        ' handle IO exception
    Catch ex As Exception
        ' ahndle other exception if occurs
    Finally
        'Close document and writer

        doc.Close()
    End Try
End Sub
...