将PDF写在页面的中心itextsharp

时间:2015-03-09 15:29:45

标签: c# pdf pdf-generation itextsharp

我有一份可填写的PDF文档(总共2页),包含不同大小的页面;第一页是8.5 * 11英寸(612 * 792),包含可填写的字段;第二页是9.5 * 12英寸(684 * 864),包含无可填写字段。即使第二页较大,也可以忽略它的边距。换句话说,如果将第二页打印为A4,则不会剪切任何内容。

但是,当我正在进行文档连接时(使用612 * 792),所有第二页将排列在页面的左下角,使得部分内容在页面的顶部和右边缘丢失。尽管在应用(684 * 864)时可以使用完整内容,但所有第一页也排列在页面的左下角,使其在页面的顶部和右侧具有宽的空白边距。

无论如何我总是可以将页面写在页面的中心,这样我就可以使用612 * 792的大小而不会丢失第二页的内容吗?

以下是连接方法:

private static byte[] ConcatContents(List<byte[]> pdf)
{
    byte[] all;

    using (MemoryStream ms = new MemoryStream())
    {
        Document doc = new Document(new Rectangle(612, 792));

        PdfWriter writer = PdfWriter.GetInstance(doc, ms);

        doc.Open();
        PdfContentByte cb = writer.DirectContent;
        PdfImportedPage page;

        PdfReader reader;
        foreach (byte[] p in pdf)
        {
            reader = new PdfReader(p);
            int pages = reader.NumberOfPages;

            // loop over document pages
            for (int i = 1; i <= pages; i++)
            {
               doc.NewPage();
               page = writer.GetImportedPage(reader, i);
               cb.AddTemplate(page, 0, 0);
            }
        }

        doc.Close();

        all = ms.ToArray();

        ms.Flush();
        ms.Dispose();
   }
   return all;
}

[UPDATE]

PDF中的原始页面大小差异 enter image description here

页面连接后,部分内容丢失,因为看起来PDF是从左下角生成的。页面大小差异导致页面内容丢失。如下图所示,第二页内容的第一行

  

&#34;由于各种政府使用此表格......&#34;

被切断,以及右边的一些内容。

enter image description here

1 个答案:

答案 0 :(得分:1)

好吧,感谢plinth的建议,我发现下面的代码可以很好地将所有第二页调整到页面的中心。虽然它看起来不是一个好习惯,但它最终会起作用。

// loop over document pages
for (int i = 1; i <= pages; i++)
{
    doc.NewPage();
    page = writer.GetImportedPage(reader, i);

    if (i == 1)
    {
        cb.AddTemplate(page, 0, 0);
    }
    else
    {
        float page1Height, page1Width, page2Height, page2Width;
        page1Height = reader.GetPageSizeWithRotation(i - 1).Height;
        page1Width = reader.GetPageSizeWithRotation(i - 1).Width;
        page2Height = reader.GetPageSizeWithRotation(i).Height;
        page2Width = reader.GetPageSizeWithRotation(i).Width;
        cb.AddTemplate(page, (page1Width - page2Width) / 2, (page1Height - page2Height) / 2);
    }
}

这是显示的结果 enter image description here