仅在第一页通过 itext.Layout.Document.ShowTextAligned 添加段落
Add Paragraph via itext.Layout.Document.ShowTextAligned on first Page only
我正在尝试使用 itext7 和 powershell 将旋转的边框文本添加到 PDF 文档的第一页。
我找到了一个很好的 solutian here from mkl 并将其移植到 Powershell:
function SetRotatedTextStamp([String]$InFile, [String]$OutFile) {
[iText.Kernel.Pdf.PdfReader] $Reader = [iText.Kernel.Pdf.PdfReader]::new($InFile)
[iText.Kernel.Pdf.PdfWriter] $Writer = [iText.Kernel.Pdf.PdfWriter]::new($OutFile)
[iText.Kernel.Pdf.PdfDocument] $PDFDoc = [iText.Kernel.Pdf.PdfDocument]::new($Reader, $Writer, $([iText.Kernel.Pdf.StampingProperties]::new()).UseAppendMode())
[iText.Layout.Document] $Doc = [iText.Layout.Document]::new($PDFDoc)
[iText.Layout.Element.Paragraph] $pCurPara = [iText.Layout.Element.Paragraph]::new("Hello World")
$pCurPara.SetWidth(100)
$pCurPara.SetBorder([iText.Layout.Borders.SolidBorder]::new([iText.Kernel.Colors.DeviceRgb]::new(255, 0, 0), 2))
$pCurPara.SetRotationAngle([Math]::PI / 4)
[iText.Kernel.Geom.Rectangle] $rect = $($PDFDoc.GetFirstPage()).GetCropBox()
$Doc.ShowTextAligned($pCurPara, ($rect.GetLeft() + $rect.GetRight()) / 2,
($rect.GetTop() + $rect.GetBottom()) / 2,
[iText.Layout.Properties.TextAlignment]::CENTER,
[iText.Layout.Properties.VerticalAlignment]::MIDDLE
)
$Doc.Close()
$PDFDoc.Close()
$Writer.Close()
$Reader.Close()
}
但是段落居中显示在最后一页,而不是第一页。
我不知道我在这里做错了什么:(
确实,在我最初的回答中,我使用了错误的 showTextAligned
重载,它绘制在最后一页,而不是第一页。当我使用未显示的单页文档进行测试时。
一般要更换
$Doc.ShowTextAligned($pCurPara, ($rect.GetLeft() + $rect.GetRight()) / 2,
($rect.GetTop() + $rect.GetBottom()) / 2,
[iText.Layout.Properties.TextAlignment]::CENTER,
[iText.Layout.Properties.VerticalAlignment]::MIDDLE
)
来自
$Doc.ShowTextAligned($pCurPara, ($rect.GetLeft() + $rect.GetRight()) / 2,
($rect.GetTop() + $rect.GetBottom()) / 2,
1,
[iText.Layout.Properties.TextAlignment]::CENTER,
[iText.Layout.Properties.VerticalAlignment]::MIDDLE,
0
)
在第一页画画。 1
是页码; 0
是一个角度,另一个可以 select 文本旋转的地方。
我正在尝试使用 itext7 和 powershell 将旋转的边框文本添加到 PDF 文档的第一页。
我找到了一个很好的 solutian here from mkl 并将其移植到 Powershell:
function SetRotatedTextStamp([String]$InFile, [String]$OutFile) {
[iText.Kernel.Pdf.PdfReader] $Reader = [iText.Kernel.Pdf.PdfReader]::new($InFile)
[iText.Kernel.Pdf.PdfWriter] $Writer = [iText.Kernel.Pdf.PdfWriter]::new($OutFile)
[iText.Kernel.Pdf.PdfDocument] $PDFDoc = [iText.Kernel.Pdf.PdfDocument]::new($Reader, $Writer, $([iText.Kernel.Pdf.StampingProperties]::new()).UseAppendMode())
[iText.Layout.Document] $Doc = [iText.Layout.Document]::new($PDFDoc)
[iText.Layout.Element.Paragraph] $pCurPara = [iText.Layout.Element.Paragraph]::new("Hello World")
$pCurPara.SetWidth(100)
$pCurPara.SetBorder([iText.Layout.Borders.SolidBorder]::new([iText.Kernel.Colors.DeviceRgb]::new(255, 0, 0), 2))
$pCurPara.SetRotationAngle([Math]::PI / 4)
[iText.Kernel.Geom.Rectangle] $rect = $($PDFDoc.GetFirstPage()).GetCropBox()
$Doc.ShowTextAligned($pCurPara, ($rect.GetLeft() + $rect.GetRight()) / 2,
($rect.GetTop() + $rect.GetBottom()) / 2,
[iText.Layout.Properties.TextAlignment]::CENTER,
[iText.Layout.Properties.VerticalAlignment]::MIDDLE
)
$Doc.Close()
$PDFDoc.Close()
$Writer.Close()
$Reader.Close()
}
但是段落居中显示在最后一页,而不是第一页。 我不知道我在这里做错了什么:(
确实,在我最初的回答中,我使用了错误的 showTextAligned
重载,它绘制在最后一页,而不是第一页。当我使用未显示的单页文档进行测试时。
一般要更换
$Doc.ShowTextAligned($pCurPara, ($rect.GetLeft() + $rect.GetRight()) / 2,
($rect.GetTop() + $rect.GetBottom()) / 2,
[iText.Layout.Properties.TextAlignment]::CENTER,
[iText.Layout.Properties.VerticalAlignment]::MIDDLE
)
来自
$Doc.ShowTextAligned($pCurPara, ($rect.GetLeft() + $rect.GetRight()) / 2,
($rect.GetTop() + $rect.GetBottom()) / 2,
1,
[iText.Layout.Properties.TextAlignment]::CENTER,
[iText.Layout.Properties.VerticalAlignment]::MIDDLE,
0
)
在第一页画画。 1
是页码; 0
是一个角度,另一个可以 select 文本旋转的地方。