我想知道在添加内容之后是否可以更改页面的尺寸?
我正在使用iTextSharp在代码中创建PDF文档,并在页面上放置一些内容。我只会在绘制内容后知道内容的高度,然后我需要基本上“裁剪”页面,以便它只与内容一样高。
我知道我可以通过将内容写入pdfTemplate,然后执行SetPageSize()和NewPage(),然后将模板添加到新页面来完成此操作。但是,此文档必须只有 1页。这就是问题 - 我不能在事后确定第1页的大小,只能在后续页面中设置,但文档只能包含一页。
除非在添加正确大小的第二页后有一种删除页面1的方法,否则我无法想到如何实现这一点:一页PDF,其页面大小我必须在写完内容后更改。
答案 0 :(得分:3)
我最终做了以下事情:
经过一天寻找更直接的方法,这似乎是最权宜之计。基本上是:
dim ms As New IO.MemoryStream
dim doc As New Document
dim pw As PdfWriter = PdfWriter.GetInstance(doc, ms)
doc.Open
Dim cb As PdfContentByte = pw.DirectContent
Dim tpl = cb.CreateTemplate(doc.PageSize.Width, doc.PageSize.Height)
... add content to template ...
' Add template to a new page of the right dimensions
doc.Add(New Paragraph(" ")) ' page 1 content required for NewPage to work
doc.SetPageSize(New Rectangle(width, height)) ' size of content we added
doc.NewPage()
cb.AddTemplate(tpl, 0, 0)
' Close our in-memory doc but leave stream open.
pw.CloseStream = False
pw.Close()
doc.Close()
' Now create actual file and write only second page of doc.
ms.Seek(0, IO.SeekOrigin.Begin) ' Go back to start of memorystream
Dim pr As New PdfReader(ms)
doc = New Document(pr.GetPageSizeWithRotation(2)) ' New doc, size of page 2
Dim copier As New PdfCopy(doc, New IO.FileStream(<filename>, IO.FileMode.Create))
doc.Open()
copier.AddPage(copier.GetImportedPage(pr, 2)) ' Add page 2 of our in-memory document.
copier.Close()
doc.Close()
pr.Close()
现在我有一个PDF,其中包含一个自定义大小的页面,以添加内容 希望它可以帮助别人!