首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iTextSharp PdfStamper添加页眉/页脚

iTextSharp PdfStamper添加页眉/页脚
EN

Stack Overflow用户
提问于 2014-09-02 18:39:22
回答 1查看 3.5K关注 0票数 0

我试图添加一个页眉或页脚在一个pdf文档中的网页。这在iTextInAction书中解释为向页面添加直接内容的正确方法。但是,当我试图在Adobe中打开这个文档时,我会得到以下错误,并且还会有一些打印问题。有什么想法吗?

代码语言:javascript
复制
Dim reader As PdfReader = Nothing
Dim stamper As PdfStamper = Nothing
Try
   reader = New PdfReader(inputFile)
   stamper = New PdfStamper(reader, New IO.FileStream(outputFile, IO.FileMode.Append))
Dim fontSz As Single = 10.0F
Dim font As New Font(font.FontFamily.HELVETICA, fontSz, 1, BaseColor.GRAY)
Dim chunk As New Chunk(headerText, font)
Dim rect As Rectangle = reader.GetPageSizeWithRotation(1)

在这里,我只是调整文本的大小,以确保它符合页面边界。

代码语言:javascript
复制
While chunk.GetWidthPoint() > rect.Width
  fontSz -= 1.0F
  font = New Font(font.FontFamily.HELVETICA, fontSz, 1, BaseColor.GRAY)
  chunk = New Chunk(wm.ToString(), font)
End While

这就是我获得超内容并将我的文本添加到其中的地方。

代码语言:javascript
复制
For pageNo As Int32 = 1 To reader.NumberOfPages
  Dim phrase As New Phrase(chunk)
  Dim x As Single = (rect.Width / 2) - (phrase.Chunks(0).GetWidthPoint() / 2)
  Dim y As Single = If(wm.WatermarkPosition = "Header", rect.Height - font.Size, 1.0F)
  Dim canvas As PdfContentByte = stamper.GetOverContent(pageNo)
  canvas.BeginText()
  ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, phrase, x, y, 0)
  canvas.EndText()
Next
Catch ex As iTextSharp.text.pdf.BadPasswordException
  Throw New InvalidOperationException("Page extraction is not supported for this pdf document. It must be allowed in order to add a watermark.")
Finally
  reader.Close()
  stamper.Close()
End Try
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-02 19:54:48

你的问题可能是这句话:

代码语言:javascript
复制
stamper = New PdfStamper(reader, New IO.FileStream(outputFile, IO.FileMode.Append))

您正在告诉.Net以附加模式将内容写入文件。如果该文件不存在,那么它将创建该文件,但随后的写入将结束,从而产生一个损坏的PDF。您应该将此更改为IO.FileMode.Create

同时,我通常建议您在创建FileStream时更加明确,并告诉.Net (因此也是Windows)您对流的进一步意图。在本例中,您只需要向它写入FileAccess.Write,当您向它写入时,您希望确保没有其他人尝试从它读取(因为它将处于无效状态),因此您可以说是FileShare.None

代码语言:javascript
复制
stamper = New PdfStamper(reader, New FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))

(顺便说一句,虽然使用IO.FileMode.Create是绝对有效的,但是看到它确实很奇怪。大多数人要么把它拼成System.IO.FileMode.Create,要么把它拼成import System.IO,然后只有我们FileMode.Create__。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25630089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档