当前位置: 首页 > 知识库问答 >
问题:

我如何使用iTextSharp(或iText)裁剪和复制页面从一个PDF到另一个

阎星河
2023-03-14

我已经编写了执行以下操作的代码:

  1. 以特定页面大小(例如8.5英寸x 11英寸)的PDF为例

为此,我使用PdfWriter。GetImportedPage方法从原始PDF获取当前页面,然后使用PdfContentByte。AddTemplate(page,x,y)方法将原始页面放置到新PDF的当前页面上。

我的新挑战是,在将原始PDF添加到新PDF之前,我需要裁剪它。例如,假设我想在强制使用之前将原始PDF裁剪2英寸。输入PDF仍然是8.5英寸x11英寸,新PDF仍然是17英寸x11英寸,但新PDF中原始PDF的两个“副本”将从其顶部、右侧、底部和左侧删除2英寸。

希望这些图像能让这一点更清楚。这是我现在所拥有的,做一个2向上的强加。(这工作得很顺利。)

但是我需要做的是:

我知道我可以通过使用MediaBox或CropBox设置来改变PDF在查看器中的显示,但是AddTemplate不遵守这些设置。我知道使用AddTemplate我可以使用变换矩阵来定位页面或缩放或旋转页面,但我不想收缩原始PDF,我想裁剪它。

谢啦

共有1个答案

逑景铄
2023-03-14

我发现我可以使用导入页面的BoundingBox在将其添加到新PDF之前对其进行裁剪(通过addTem板)。

所以我的代码看起来像这样:

PdfImportedPage page = writer.GetImportedPage(pageNumber);

// Crop!
page.BoundingBox = new Rectangle(llx, lly, urx, ury);

// Add to new PDF
writer.DirectContent.AddTemplate(page, x, y);

这就是诀窍!

 类似资料:
  • 我使用BIRT报告创建了一个PDF,每个数据页的标题中都包含一个表。现在我使用IText将目录添加到PDF报告中。有没有办法使用IText将标题从数据页复制到TOC页?

  • 我有一个模板。有页眉和页脚的pdf(一些文本/图像)。我正在生成一个包含其他数据的新pdf(比如result.pdf)。我需要复制/重复模板。结果的每一页上都有pdf。pdf。所以基本上是模板。pdf将作为结果每页的页眉和页脚。pdf。 问题在于模板。pdf仅显示在结果的第1页。pdf。我的结果。pdf可以是任意“n”个页面。

  • 我想使用iTextSharp和rectangle(0,100,600,155)裁剪PDF文件。一切都很好,当你打开创建的*.pdf文件时,你只能看到裁剪的内容,但是!如果你解析那个pdf,仍然有信息和文本来自不可见的文档部分,我不能接受。如何完全删除该数据? 不幸的是,如果我想在不支付许可证的情况下将我的应用程序商业化,我就不能使用这些代码,所以我不得不考虑不同的库...

  • 问题内容: 好的,我设置了一个会话…但是现在如何在其他页面上使用它呢? 我试着做 问题答案: 如果您的PHP设置清晰(会话写正常)并且cookie通常发送到浏览器(并保留了),则您应该可以执行以下操作 在第一页上: 在第二页上: 请注意,在发送任何输出之前,必须先调用session_start(),因此,如果必须在会话_start中使用@,它可能会隐藏警告。 由于这些是警告,如果给定的示例不起作用

  • 我有一个小问题,我正在努力寻找一个解决办法。长话短说,我必须用itext从pdf中删除每个页面的顶部。我用成功地做到了这一点,但问题是,这会通过删除顶部使页面变小。 有人能帮我实现这一点,使页面大小保持不变。我的想法是用一个白色矩形覆盖顶部页面,但经过多次尝试,我没有做到这一点。 这是我用来裁剪页面的当前代码。

  • 我正在尝试使用iTextSharp循环浏览PDF文档并删除所有空白页。我有代码检查每个页面是否为空,并将其写入新的PDF,但在关闭新文档时,我收到错误“文档没有页面”。但是,在文件夹中创建的文件确实具有我所期望的文件大小。 这是我目前的代码: