Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# iTextSharp正在将页面旋转到我想要的页面之后_C#_Pdf_Itext_Landscape Portrait - Fatal编程技术网

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对我来说似乎工作得很好。非常感谢。我想我会回答我自己的问题。我不确定什么是最好的程序。回答你自己是可以的,特别是因为我只是给了一个提示。不过,如果答案只是别人评论的副本,你应该让那个人写下答案。