我有一份可填写的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中的原始页面大小差异
页面连接后,部分内容丢失,因为看起来PDF是从左下角生成的。页面大小差异导致页面内容丢失。如下图所示,第二页内容的第一行
&#34;由于各种政府使用此表格......&#34;
被切断,以及右边的一些内容。
答案 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);
}
}
这是显示的结果