Векторная графика с ITextSharp - PullRequest
2 голосов
/ 08 сентября 2011

Я слышал, что ITextSharp не поддерживает класс JAVA2D, означает ли это, что я не могу импортировать векторные точки из клиентских баз данных для «печати» в приложение ITextSharp?

Я бы очень хотел найти ответ на этот вопрос, прежде чем идти дальше с этим предложением. У кого-нибудь есть реальный опыт этого?

1 Ответ

2 голосов
/ 08 сентября 2011

Несмотря на то, что вы не можете использовать JAVA2D с iTextSharp, вы все равно можете рисовать векторную графику в формате PDF, напрямую записывая объект PdfWriter.DirectContent. Он поддерживает все стандартные методы MoveTo(), LineTo(), CurveTo() и т. Д., Которые вы ожидаете от программы векторного рисования. Ниже представлено полнофункциональное приложение VB.Net WinForms, предназначенное для iTextSharp 5.1.1.0, которое демонстрирует некоторые простые способы использования.

Option Explicit On
Option Strict On

Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim OutputFile As String = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "VectorTest.pdf")

        Using FS As New FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None)
            Using Doc As New Document(PageSize.LETTER)
                Using writer = PdfWriter.GetInstance(Doc, FS)
                    ''//Open the PDF for writing
                    Doc.Open()

                    Dim cb As PdfContentByte = writer.DirectContent

                    ''//Save the current state so that we can restore it later. This is not required but it makes it easier to undo things later
                    cb.SaveState()

                    ''//Draw a line with a bunch of options set
                    cb.MoveTo(100, 100)
                    cb.LineTo(500, 500)
                    cb.SetRGBColorStroke(255, 0, 0)
                    cb.SetLineWidth(5)
                    cb.SetLineDash(10, 10, 20)
                    cb.SetLineCap(PdfContentByte.LINE_CAP_ROUND)
                    cb.Stroke()

                    ''//This undoes any of the colors, widths, etc that we did since the last SaveState
                    cb.RestoreState()

                    ''//Draw a circle
                    cb.SaveState()
                    cb.Circle(200, 500, 50)
                    cb.SetRGBColorStroke(0, 255, 0)
                    cb.Stroke()

                    ''//Draw a bezier curve
                    cb.RestoreState()
                    cb.MoveTo(100, 300)
                    cb.CurveTo(140, 160, 300, 300)
                    cb.SetRGBColorStroke(0, 0, 255)
                    cb.Stroke()

                    ''//Close the PDF
                    Doc.Close()
                End Using
            End Using
        End Using
    End Sub
End Class

EDIT

Кстати, хотя вы не можете использовать JAVA2D (который, очевидно, является Java и не будет работать с .Net), вы можете создавать изображения iTextSharp, используя стандартный класс System.Drawing.Image, и передавать его статическому методу iTextSharp.text.Image.GetInstance(). К сожалению, System.Drawing.Image является растровым / растровым объектом, поэтому он не поможет вам в этом случае.

...