C# iTextSharp正在将页面旋转到我想要的页面之后
我根据一些建议拼凑出了这段代码。它几乎可以工作,但它会在需要的页面之后旋转页面。我的示例中的第一个页面是横向页面,但第二个页面是旋转页面。我不明白发生了什么事C# iTextSharp正在将页面旋转到我想要的页面之后,c#,pdf,itext,landscape-portrait,C#,Pdf,Itext,Landscape Portrait,我根据一些建议拼凑出了这段代码。它几乎可以工作,但它会在需要的页面之后旋转页面。我的示例中的第一个页面是横向页面,但第二个页面是旋转页面。我不明白发生了什么事 Document document = new Document(); PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outFile, FileMode.Create)); document.Open();
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();
Document Document=新文档();
PdfWriter writer=PdfWriter.GetInstance(文档,新文件流(outFile,FileMode.Create));
document.Open();
PdfContentByte cb=writer.DirectContent;
PdfReader reader=新PdfReader(字节);
int pages=reader.NumberOfPages;
for(int i=1;i psize.Height?PageSize.A4.Rotate():PageSize.A4);
开关(psize.旋转)
{
案例0:
cb.AddTemplate(第页,1f,0,0,1f,0,0);
打破
案例90:
cb.AddTemplate(第页,0,-1f,1f,0,0,psize.Height);
打破
案例180:
cb.AddTemplate(第-1f、0、0、-1f、0、0页);
打破
案例270:
cb.AddTemplate(页面,0,1.0F,-1.0F,0,psize.Width,0);
打破
}
}
document.Close();
writer.Close();
你们看到了吗?我试着按照建议使用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));
}
}
}
使用(文档=新文档())
{
使用(PdfCopy copy=newpdfcopy(文档,新文件流(outFile,FileMode.Create)))
{
document.Open();
PdfReader reader=新PdfReader(字节);
对于(int page=0;page
我遇到过这样一个案例:通过我们的归档系统输入的pdf文档偶尔会被客户的扫描仪赋予旋转属性。这导致发送它们的另一个系统出现问题。我使用Erosebe的代码和mkl的修复程序来创建一个类,以便在将来有人需要时正确地执行此操作
输出将是一个方向正确、旋转为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();
}
}
}
使用系统;
使用System.IO;
使用iTextSharp.text.pdf;
使用iTextSharp.text;
公共静态无效未旋转(字符串输入路径、字符串输出路径)
{
使用(文档=新文档())
{
使用(PdfWriter writer=PdfWriter.GetInstance(文档,新文件流(outputPath,FileMode.Create)))
{
使用(PdfReader读取器=新PdfReader(inputPath))
{
document.Open();
PdfContentByte cb=writer.DirectContent;
int pages=reader.NumberOfPages;
for(int i=1;i psize.Height?PageSize.LETTER.Rotate():PageSize.LETTER);
document.NewPage();
PdfImportedPage=writer.GetImportedPage(reader,i);
开关(psize.旋转)
{
案例0:
writer.DirectContent.AddTemplate(page,1f,0,0,1f,0,0);
打破
案例90:
writer.DirectContent.AddTemplate(页面,0,-1f,1f,0,0,psize.Height);
打破
案例180:
writer.DirectContent.AddTemplate(第-1f页,第0页,第0页,第-1f页,第1页,第1页,第2页,第1页,第1页,第2页,第1页,第2页,第1页,第2页,第2页,第2页;
打破
案例270:
writer.DirectContent.AddTemplate(页面,0,1f,-1f,0,psize.Width,0);
打破
违约:
抛出新的InvalidOperationException(string.Format(“意外的页面旋转:[{0}]”,psize.rotation));
}
}
document.Close();
}
writer.Close();
}
}
}
PDF中的不同页面可以有不同的大小。因此,您设置的Document
属性PageSize
不会更改当前页面的大小,而是更改以后创建的新页面的大小。您的实际用户案例是什么?您似乎只是想复制一些页面。这应该使用PdfCopy
完成。该类为您正确地组织页面大小。您是对的。PdfCopy对我来说似乎工作得很好。非常感谢。我想我会回答我自己的问题。我不确定什么是最好的程序。回答你自己是可以的,特别是因为我只是给了一个提示。不过,如果答案只是别人评论的副本,你应该让那个人写下答案。