iTextSharp 在我想要横向显示的页面之后旋转页面
iTextSharp is rotating the page after the one I want to landscape
我根据一些建议拼凑了这段代码。它几乎可以工作,但它会在需要的页面之后旋转页面。我的示例中的第一页是横向的,但第二页是旋转的页面。我不明白这是怎么回事。
Document document = new Document();
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outFile, FileMode.Create));
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfReader reader = new PdfReader(bytes);
int pages = reader.NumberOfPages;
for (int i = 1; i <= pages; i++)
{
document.NewPage();
PdfImportedPage page = writer.GetImportedPage(reader, i);
Rectangle psize = reader.GetPageSizeWithRotation(i);
document.SetPageSize(psize.Width > psize.Height ? PageSize.A4.Rotate() : PageSize.A4);
switch (psize.Rotation)
{
case 0:
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
break;
case 90:
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, psize.Height);
break;
case 180:
cb.AddTemplate(page, -1f, 0, 0, -1f, 0, 0);
break;
case 270:
cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, psize.Width, 0);
break;
}
}
document.Close();
writer.Close();
你们看到了吗?
我尝试按照 mkl 的建议使用 PdfCopy。到目前为止它似乎工作正常并且简单得多。这是我正在使用的。
using (Document document = new Document())
{
using (PdfCopy copy = new PdfCopy(document, new FileStream(outFile, FileMode.Create)))
{
document.Open();
PdfReader reader = new PdfReader(bytes);
for (int page = 0; page < reader.NumberOfPages;)
{
++page;
copy.AddPage(copy.GetImportedPage(reader, page));
}
}
}
我有一个案例,通过我们的文件系统进入的 pdf 文档偶尔会被客户的扫描仪轮换 属性。这导致发送它们的另一个系统出现问题。我使用 Erosebe 的代码和 mkl 的修复来创建一个 class 以在将来有人需要时正确地执行此操作。
输出将是一个方向正确且旋转为 0 的文档。它使用 itextsharp。
using System;
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text;
public static void UnRotate(string inputPath, string outputPath)
{
using (Document document = new Document())
{
using (PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputPath, FileMode.Create)))
{
using(PdfReader reader = new PdfReader(inputPath))
{
document.Open();
PdfContentByte cb = writer.DirectContent;
int pages = reader.NumberOfPages;
for (int i = 1; i <= pages; i++)
{
iTextSharp.text.Rectangle psize = reader.GetPageSizeWithRotation(i);
document.SetPageSize(psize.Width > psize.Height ? PageSize.LETTER.Rotate() : PageSize.LETTER);
document.NewPage();
PdfImportedPage page = writer.GetImportedPage(reader, i);
switch (psize.Rotation)
{
case 0:
writer.DirectContent.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
break;
case 90:
writer.DirectContent.AddTemplate(page, 0, -1f, 1f, 0, 0, psize.Height);
break;
case 180:
writer.DirectContent.AddTemplate(page, -1f, 0, 0, -1f, psize.Width, psize.Height);
break;
case 270:
writer.DirectContent.AddTemplate(page, 0, 1f, -1f, 0, psize.Width, 0);
break;
default:
throw new InvalidOperationException(string.Format("Unexpected page rotation: [{0}].", psize.Rotation));
}
}
document.Close();
}
writer.Close();
}
}
}
我根据一些建议拼凑了这段代码。它几乎可以工作,但它会在需要的页面之后旋转页面。我的示例中的第一页是横向的,但第二页是旋转的页面。我不明白这是怎么回事。
Document document = new Document();
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outFile, FileMode.Create));
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfReader reader = new PdfReader(bytes);
int pages = reader.NumberOfPages;
for (int i = 1; i <= pages; i++)
{
document.NewPage();
PdfImportedPage page = writer.GetImportedPage(reader, i);
Rectangle psize = reader.GetPageSizeWithRotation(i);
document.SetPageSize(psize.Width > psize.Height ? PageSize.A4.Rotate() : PageSize.A4);
switch (psize.Rotation)
{
case 0:
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
break;
case 90:
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, psize.Height);
break;
case 180:
cb.AddTemplate(page, -1f, 0, 0, -1f, 0, 0);
break;
case 270:
cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, psize.Width, 0);
break;
}
}
document.Close();
writer.Close();
你们看到了吗?
我尝试按照 mkl 的建议使用 PdfCopy。到目前为止它似乎工作正常并且简单得多。这是我正在使用的。
using (Document document = new Document())
{
using (PdfCopy copy = new PdfCopy(document, new FileStream(outFile, FileMode.Create)))
{
document.Open();
PdfReader reader = new PdfReader(bytes);
for (int page = 0; page < reader.NumberOfPages;)
{
++page;
copy.AddPage(copy.GetImportedPage(reader, page));
}
}
}
我有一个案例,通过我们的文件系统进入的 pdf 文档偶尔会被客户的扫描仪轮换 属性。这导致发送它们的另一个系统出现问题。我使用 Erosebe 的代码和 mkl 的修复来创建一个 class 以在将来有人需要时正确地执行此操作。
输出将是一个方向正确且旋转为 0 的文档。它使用 itextsharp。
using System;
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text;
public static void UnRotate(string inputPath, string outputPath)
{
using (Document document = new Document())
{
using (PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputPath, FileMode.Create)))
{
using(PdfReader reader = new PdfReader(inputPath))
{
document.Open();
PdfContentByte cb = writer.DirectContent;
int pages = reader.NumberOfPages;
for (int i = 1; i <= pages; i++)
{
iTextSharp.text.Rectangle psize = reader.GetPageSizeWithRotation(i);
document.SetPageSize(psize.Width > psize.Height ? PageSize.LETTER.Rotate() : PageSize.LETTER);
document.NewPage();
PdfImportedPage page = writer.GetImportedPage(reader, i);
switch (psize.Rotation)
{
case 0:
writer.DirectContent.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
break;
case 90:
writer.DirectContent.AddTemplate(page, 0, -1f, 1f, 0, 0, psize.Height);
break;
case 180:
writer.DirectContent.AddTemplate(page, -1f, 0, 0, -1f, psize.Width, psize.Height);
break;
case 270:
writer.DirectContent.AddTemplate(page, 0, 1f, -1f, 0, psize.Width, 0);
break;
default:
throw new InvalidOperationException(string.Format("Unexpected page rotation: [{0}].", psize.Rotation));
}
}
document.Close();
}
writer.Close();
}
}
}