c# - iTextSharp 如何将页面从横向旋转/切换为纵向

标签 c# itext

我正在使用 iTextSharp 将多个 PDF 文件合并为一个 Pdf。我找到了一个 code sampletwo在网络上了解如何完成此任务。

它们都能正常工作,没有明显的问题,因为我能够将多个 PDF 文件合并为一个 PDF。

我确实遇到的问题是,我希望所有页面都是纵向的,因为一些 PDF 文件的页面是横向的,我希望将它们旋转为纵向。我不介意它们要么倒置要么侧放,但它们必须都是纵向的。

查看所列示例中的代码部分:

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) 链接中的代码,我将如何更改 page 的页面布局 从横向到纵向,在我使用 cb.AddTemplate... 将其添加到新合并的 PDF 文档之前?

附言。确定页面是横向还是纵向我使用下面的 code从 SO 获得(适用于上面的代码示例):

float pageXYRatio = page.Width / page.Height;
if (XYRatio > 1f)
{
    //page is landscape
}
else
{
    //page is portrait
}

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

我用过类似的东西。

cb.PdfDocument.NewPage();
PdfImportedPage page1 = writer.GetImportedPage(reader, i);

Rectangle psize = reader.GetPageSizeWithRotation(i);
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;
}

关于c# - iTextSharp 如何将页面从横向旋转/切换为纵向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5345067/

相关文章:

pdf - 为什么这两个 itext 7 签名和验证文档之一对 Adob​​e DC 阅读器无效?

java - 使用 iText 在每个页面中进行数字签名

c# - for 循环和带闭包的 foreach 循环的不同行为

C# 枚举正则表达式匹配

java - 在 iText 上标题图像之后插入图像

java - 如何在jsf中将pdf文件中表格标题的标题字体样式设置为粗体

java - 修改Itext中现有PDF的字体

c# - asp.net 核心自动映射器 ViewModel 到 Model

c# - 使用属性或扩展 json.net 库寻找 Hydra/Json-ld 序列化程序

c# - 如果日期为 24 :00 as time?,我该如何管理日期