仅在第一页通过 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 文本旋转的地方。