如何修改VB中的iTextSharp.text.Rectangle左上角位置?
How to Modify a iTextSharp.text.Rectangle Top left position in VB?
我正在使用 VB 中的 itextsharp dll 生成 PDF。在PDF中,需要在矩形和文本之间增加space。我尝试设置边距并更改矩形坐标,但顶部矩形和文本之间的 space 未创建。请参阅附件。
下面是我用来生成 PDF
的代码
Dim reader As PdfReader = New PdfReader(tempFile)
Dim size As Rectangle = reader.GetPageSize(1)
Dim AcroAVDoc As Document = New Document(iTextSharp.text.PageSize.A4.Rotate())
AcroAVDoc.SetMargins(0, 0, 0, 0)
Dim FS As FileStream = New FileStream(newFile, FileMode.Create, FileAccess.Write)
Dim writer As PdfWriter = PdfWriter.GetInstance(AcroAVDoc, FS)
AcroAVDoc.Open()
If (SaveDoc) Then
Dim cb As PdfContentByte = writer.DirectContent
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
cb.SetColorFill(BaseColor.BLACK)
cb.SetFontAndSize(bf, 11)
cb.BeginText()
Dim text As String = "HeaderText " + TableData(HeaderText)
''put the alignment And coordinates here
cb.SetTextMatrix(240, 583)
cb.ShowText(text)
cb.EndText()
''create the New page And add it to the pdf
Dim Page As PdfImportedPage = writer.GetImportedPage(reader, 1)
Dim psize As Rectangle = reader.GetPageSizeWithRotation(1)
cb.AddTemplate(Page, 0, -1.0F, 1.0F, 0, 0, psize.Height)
'AcroAVDoc.Save(1, newFile)
End If
AcroAVDoc.Close()
FS.Close()
writer.Close()
reader.Close()
您的代码的作用(如果 SaveDoc
是 true
)是
- 正在
newFile
中创建横向 A4 页面大小的新 PDF 文件,
- 在其第一页绘制字符串
text
,并且
- 在同一首页上绘制
tempFile
中 PDF 第一页的旋转静态内容。
因此,要修改文本相对于从其他文件复制的内容的位置,您必须将绘制文本的位置调整为 and/or 绘制导入内容的位置。
您通过设置文本矩阵(仅平移坐标)来设置您绘制的文本的位置:
cb.SetTextMatrix(240, 583)
您通过设置变换矩阵(全矩阵)来设置您绘制的导入页面内容的位置:
cb.AddTemplate(Page, 0, -1.0F, 1.0F, 0, 0, psize.Height)
第二个到第五个参数(0, -1.0F, 1.0F, 0
)定义绕左下角顺时针旋转90°,第六个和第七个参数(0, psize.Height
)定义向上平移。由于围绕左下角的旋转会将内容旋转出可见页面区域,因此需要向上平移才能将其移回视图中。
要调整文本相对于导入页面的位置,只需尝试稍微更改文本的 240, 583
and/or 和导入页面的 0, psize.Height
(例如正负 10) 直到符合您的期望。
我正在使用 VB 中的 itextsharp dll 生成 PDF。在PDF中,需要在矩形和文本之间增加space。我尝试设置边距并更改矩形坐标,但顶部矩形和文本之间的 space 未创建。请参阅附件。 下面是我用来生成 PDF
的代码 Dim reader As PdfReader = New PdfReader(tempFile)
Dim size As Rectangle = reader.GetPageSize(1)
Dim AcroAVDoc As Document = New Document(iTextSharp.text.PageSize.A4.Rotate())
AcroAVDoc.SetMargins(0, 0, 0, 0)
Dim FS As FileStream = New FileStream(newFile, FileMode.Create, FileAccess.Write)
Dim writer As PdfWriter = PdfWriter.GetInstance(AcroAVDoc, FS)
AcroAVDoc.Open()
If (SaveDoc) Then
Dim cb As PdfContentByte = writer.DirectContent
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
cb.SetColorFill(BaseColor.BLACK)
cb.SetFontAndSize(bf, 11)
cb.BeginText()
Dim text As String = "HeaderText " + TableData(HeaderText)
''put the alignment And coordinates here
cb.SetTextMatrix(240, 583)
cb.ShowText(text)
cb.EndText()
''create the New page And add it to the pdf
Dim Page As PdfImportedPage = writer.GetImportedPage(reader, 1)
Dim psize As Rectangle = reader.GetPageSizeWithRotation(1)
cb.AddTemplate(Page, 0, -1.0F, 1.0F, 0, 0, psize.Height)
'AcroAVDoc.Save(1, newFile)
End If
AcroAVDoc.Close()
FS.Close()
writer.Close()
reader.Close()
您的代码的作用(如果 SaveDoc
是 true
)是
- 正在
newFile
中创建横向 A4 页面大小的新 PDF 文件, - 在其第一页绘制字符串
text
,并且 - 在同一首页上绘制
tempFile
中 PDF 第一页的旋转静态内容。
因此,要修改文本相对于从其他文件复制的内容的位置,您必须将绘制文本的位置调整为 and/or 绘制导入内容的位置。
您通过设置文本矩阵(仅平移坐标)来设置您绘制的文本的位置:
cb.SetTextMatrix(240, 583)
您通过设置变换矩阵(全矩阵)来设置您绘制的导入页面内容的位置:
cb.AddTemplate(Page, 0, -1.0F, 1.0F, 0, 0, psize.Height)
第二个到第五个参数(0, -1.0F, 1.0F, 0
)定义绕左下角顺时针旋转90°,第六个和第七个参数(0, psize.Height
)定义向上平移。由于围绕左下角的旋转会将内容旋转出可见页面区域,因此需要向上平移才能将其移回视图中。
要调整文本相对于导入页面的位置,只需尝试稍微更改文本的 240, 583
and/or 和导入页面的 0, psize.Height
(例如正负 10) 直到符合您的期望。