2
我聽說ITextSharp不支持JAVA2D類,這是否意味着我不能從客戶端數據庫導入矢量點以「打印」到ITextSharp應用程序?帶有ITextSharp的矢量圖形
在繼續討論這個建議之前,我會很樂意找到答案。 任何人都有這方面的真實經歷?
我聽說ITextSharp不支持JAVA2D類,這是否意味着我不能從客戶端數據庫導入矢量點以「打印」到ITextSharp應用程序?帶有ITextSharp的矢量圖形
在繼續討論這個建議之前,我會很樂意找到答案。 任何人都有這方面的真實經歷?
雖然確實無法在iTextSharp中使用JAVA2D,但仍然可以通過直接寫入PdfWriter.DirectContent
對象,以PDF原生方式繪製矢量圖形。它支持所有的標準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
編輯
順便說一句,雖然你不能使用的Java2D(這顯然是Java的,不會與.net工作),你可以使用標準的System.Drawing.Image
類,並通過它創建iTextSharp的圖像至iTextSharp.text.Image.GetInstance()
靜態方法。不幸的是System.Drawing.Image
是一個光柵/位圖對象,所以在這種情況下它不會幫助你。
非常感謝您提出這樣一個很好的例子並回答我的問題。這將使我的工作更輕鬆!我想我現在會使用ITextSharp來進行即將到來的項目。/R –