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

使用iTextSharp在PDF中的每一页后面插入一个空白页

尉迟景福
2023-03-14

我试过以下方法。它似乎使每个页面后面的空白页的方向和大小是源PDF页面的方向和大小,但源PDF页面的方向和大小似乎是前一个空白页的方向和大小:

    private string DocumentWithBlankPagesInserted(string fileName, string userComments)
    {
        string outputFileName = v.tmp + @"\" + v.tmpDir + @"\" + Guid.NewGuid().ToString() + ".pdf";

        Document document = new Document();
        try
        {
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));

            document.Open();

            PdfContentByte cb = writer.DirectContent;
            PdfReader reader = new PdfReader(fileName);

            for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++)
            {
                document.SetPageSize(reader.GetPageSizeWithRotation(pageNumber));

                Chunk fileRef = new Chunk();
                fileRef.SetLocalDestination(fileName);

                PdfImportedPage page1 = writer.GetImportedPage(reader, pageNumber);

                Rectangle psize = reader.GetPageSizeWithRotation(pageNumber);
                switch (psize.Rotation)
                {
                    case 0:
                        cb.AddTemplate(page1, 1f, 0, 0, 1f, 0, 0);
                        break;
                    case 90:
                        cb.AddTemplate(page1, 0, -1f, 1f, 0, 0, psize.Height);
                        break;
                    case 180:
                        cb.AddTemplate(page1, -1f, 0, 0, -1f, 0, 0);
                        break;
                    case 270:
                        cb.AddTemplate(page1, 0, 1.0F, -1.0F, 0, psize.Width, 0);
                        break;
                    default:
                        break;
                }

                document.NewPage();
                document.Add(fileRef);
                document.NewPage();
            }
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
            document.Close();
        }
        return outputFileName;
    }

共有1个答案

诸修伟
2023-03-14

正如我在评论中解释的那样,这个问题是如何在Java中向现有的PDF添加空白页的重复?

您应该使用pdfstamper而不是pdfwriter(这在StackOverflow的不同回答中已经解释过无数次了)。使用insertpage()方法,可以添加任意大小的页:

PdfReader reader = new PdfReader(src);
PdfStamper stamper=new PdfStamper(reader, new FileStream(dest, FileMode.Create));
int total = reader.NumberOfPages + 1
for (int pageNumber = total; pageNumber > 0; pageNumber--) {
     stamper.InsertPage(pageNumber, PageSize.A4);
}
stamper.Close();
reader.Close();

请注意,我以相反的顺序添加页面。这是基本逻辑:添加页面会更改页面计数,如果从页面1切换到total,则更难跟踪pagenumber。相反的方向更容易。

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

  • 目前正在用C#中的ITextSharp构建一个PDF。PDF由三个“部分”组成,一个封面,一个可以跨越多个页面的表格,以及一个最终页面。拥有该表的页面需要在第一页包含页眉,并在所有包含页眉的页面上包含页脚,但封面和最后一页不需要。 我使用XMLWorker构建页面,但这并不重要。构建页面的代码如下: 我遇到的麻烦是确定一种方法来防止页脚出现在结束页上。我正在重写OnEndPage以创建页脚。是否有

  • 在java Web应用程序中使用PDFBox。我有一个代表多页绘图或蓝图的PDF文件。还有其他PDF文件表示对父文件的修改。我想将这些页面插入到第1页和第2页之间的父PDF文件中。 我找到了关于合并和添加页面的文章,但不完全是我需要的。 一些指导会很有帮助。 到目前为止我的代码:

  • 我有一个模板分裂成3个文件(头,正文和页脚),所有在HTML。我需要导出一个pdf文件,使用 itextsharp lib。 我使用折叠代码来实现这一点。

  • 我需要将N个PDF文件合并成一个。我先创建一个空白文件 稍后,我将遍历html字符串数组 我不太明白PdfWriter和PDFCopy之间的区别。

  • 我正在使用PDFbox下载PDF。我想在中间添加一些新页面。 此代码在PDF结尾处插入新页面。如何在另一个位置插入页面?