将一个PDF页面拆分为两个

我想将一个宽PDF页面分成两个PDF页面。 我的原始页面宽两个A4页面大小但高度正常(对于A4)。 我试图使用IText但没有效果。 谢谢你的关注。

我不知道iText API,但您可以按照以下步骤进行操作:

创建现有页面的两个新副本。 这意味着您拥有相同的资源,相同的ContentStream等。

获取MediaBox作为第一页,这是一个列为[llx lly urx ury]的数组。

if MediaBox[2] - MediaBox[0] == long edge of A4 page then HalfPageWidth = MediaBox[2] - MediaBox[0]; PageCopy1.CropBox = [MediaBox[0] MediaBox[1] (MediaBox[0] + HalfPageWidth) MediaBox[3]] PageCopy2.CropBox = [(MediaBox[0] + HalfPageWidth) MediaBox[1] MediaBox[2] MediaBox[3]] else HalfPageHeight = MediaBox[3] - MediaBox[1]; PageCopy1.CropBox = [MediaBox[0] MediaBox[1] MediaBox[2] (MediaBox[1] + HalfPageHeight)] PageCopy2.CropBox = [MediaBox[0] (MediaBox[1] + HalfPageHeight)] MediaBox[2] MediaBox[3]] 

删除原始页面并保存这两页。 基本上,您正在制作两个相同的页面副本,并将每个页面裁剪为一半。 您可能还需要设置页面旋转。

我希望用更改的页面创建原始PDF的副本而不是更新现有的PDF,这样在iText中工作会更容易,并且您始终可以重命名文件aftwarads。

看看这里的HelloWorldCopy示例。

您需要更改的是将宽页面拆分为两页的调用。 对于除要分割的页面之外的所有页面,请执行与HelloWorldCopy示例相同的操作 – 对于此页面,请查看备用PDfCopy.addPage()方法,该方法允许您指定定义新创建页面大小的矩形。

因此,应该允许您将宽页面拆分为两个大小合适的新页面。 现在,您需要确保宽页面的左侧部分进入第一个新页面,右侧部分进入第二个新页面。 为此,您应该查看PdfImportedPage.setMatrix方法( PdfImportedPage是示例中从copy.getImportedPage()返回的对象。

示例代码在c#中,但非常相似。 我用它将一个A3页面拆分为2个A4页面,你只需要使用x,y值。

  private void CreatePdf(string saveLocation, string bigPageSource) { Document document = new Document(PageSize.A4); PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(saveLocation, FileMode.Create)); document.Open(); PdfContentByte cb = writer.DirectContent; PdfReader reader = new PdfReader(bigPageSource); PdfImportedPage page = writer.GetImportedPage(reader, 1); document.NewPage(); cb.AddTemplate(page, 0, 0); document.NewPage(); cb.AddTemplate(page, -PageSize.A4.Width, 0); document.Close(); } 

您也可以使用Ghostscript(在调用中添加PostScript代码段)。 所需的命令行:

输出左侧:

  gs \ -o left-half.pdf \ -sDEVICE=pdfwrite \ -g5950x8420 \ -dFIXEDMEDIA \ -PDFFitPage \ -dAutoRotatePages=/None \ -c "<> setpagedevice" \ doubleup.pdf 

输出右侧:

  gs \ -o left-half.pdf \ -sDEVICE=pdfwrite \ -g5950x8420 \ -dFIXEDMEDIA \ -PDFFitPage \ -dAutoRotatePages=/None \ -c "<> setpagedevice" \ doubleup.pdf 

这些命令行可以很容易地转换为Java或任何代码,以使用适当的GS API调用…

尝试布里斯 !

通过简单的用户界面,您可以通过在视觉上重叠的页面上拟合矩形来精确定义裁剪区域。

它配对均匀和不均匀的页面,并分隔用户选择的页面。 您可以计算精确的A4比率并手动输入值,而不是绘制矩形,和/或对齐裁剪区域。