我正在使用iTextSharp将多个PDF文件合并为一个Pdf . 我在网上找到了如何完成此任务的code sample或two .
它们都可以工作,没有明显的问题,因为我能够将多个PDF文件合并为一个PDF .
我所遇到的问题是我希望所有页面都在PORTRAIT中,因为一些PDF文件在LANDSCAPE中有页面,我希望它们可以旋转到PORTRAIT . 我不介意他们要么颠倒,要么侧身,但他们都必须是肖像 .
查看列出的示例中的代码部分:
page = writer.GetImportedPage(reader, i);
rotation = reader.GetPageRotation(i);
始终将页面旋转值返回为0(零),因此代码部分
if (rotation == 90 rotation == 270)
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0,
reader.GetPageSizeWithRotation(i).Height);
}
永远不会被执行(如果这是应该做的,旋转页面) .
那么,基于第一个代码示例的链接中的代码 page = writer.GetImportedPage(reader, i)
在将 cb.AddTemplate...
添加到新的合并PDF文档之前,我将如何将 page
的页面布局从Landscape更改为Portrait?
PS . 确定页面是横向还是纵向我使用从SO获得的以下code(适用于上面的代码示例):
float pageXYRatio = page.Width / page.Height;
if (XYRatio > 1f)
{
//page is landscape
}
else
{
//page is portrait
}
任何帮助,将不胜感激 .
谢谢
4 回答
正如你发现的那样,你不能总是指望PdfReader.GetPageRotation() .
例如,如果Document对象是这样创建的:
PdfReader.GetPageRotation()
将 always 返回0 .确定页面是纵向还是横向的一种非常简单的方法是比较每个PDF页面的每个页面的宽度和高度're combining. if the width is greater than the height of an individual page, add a dictionary entry to that page and explicitly set it'的旋转 . 像下面这样的东西HTTP handler:
看看PdfDictionary class . 和here's a good thread来自mailing list解释iText [Sharp]如何在每页中存储页面旋转 .
当然,你可能想投资the book .
我用过这样的东西 .
用那个例子http://alex.buayacorp.com/merge-pdf-files-with-itext-and-net.html我添加了以下行:
我的pdf是用SSRS构建的,它们的大小相同,所以我使用第一篇文档的第一页(我想)