C#使用iTextSharp

时间:2017-01-06 03:42:26

标签: c# itext

布鲁诺 { 这不是"我有普通的PDF文件,我想使用itext LIBRARY在PDF的末尾插入空白页,而不会打扰PDF内容。"

我尝试在源PDF中的每个页面之后添加空白页面 - 而不仅仅是源PDF文档末尾的1个空白页面。 } 使用C#(非Java) - 有没有人知道如何插入空白页(最好是A4 - Portrait 8.5 x 11)使用iTextSharp在PDF中的每一页之后,无论源PDF的页面大小和方向如何?源PDF的每个页面可以具有不同的大小和方向。

我尝试过以下方法。它似乎使每页后面的空白页面显示源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 个答案:

答案 0 :(得分:1)

正如我在评论中所解释的,这个问题与How to add blank pages to an existing PDF in java?

重复

您应该使用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();

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