Itext得到了歪曲的页面方向

时间:2016-08-31 04:35:17

标签: c# pdf itext

我正在尝试创建app作物pdf并旋转页面(所有页面都应该有较长的横向水平)。

我首先使用此功能裁剪:

public void obreziPDF(string fileName)
{
     f (System.IO.File.Exists(fileName))
     {
        string putanja = System.IO.Path.GetDirectoryName(fileName);
        PdfReader pdfReader = new PdfReader(System.IO.File.ReadAllBytes(fileName));
        PdfStamper stamper = new PdfStamper(pdfReader, new System.IO.FileStream(fileName, FileMode.Create, FileAccess.Write));
        for (int p = 1; p <= pdfReader.NumberOfPages; p++)
        {
            PdfDictionary page = pdfReader.GetPageN(1);
            Rectangle rect = getOutputPageSize(pdfReader, 1);
            float[] flo = { rect.Left, rect.Bottom, rect.Right, rect.Top };
            PdfArray pdfa = new PdfArray(flo);
            page.Put(PdfName.MEDIABOX, pdfa);
            stamper.MarkUsed(page);
        }
        stamper.Close();
        pdfReader.Close();
     }
}

这将检查旋转并根据需要旋转。

public void okreniPDF(string fileName)
{
            if (System.IO.File.Exists(fileName))
            {
                string putanja = System.IO.Path.GetDirectoryName(fileName);
                PdfReader pdfReader1 = new PdfReader(System.IO.File.ReadAllBytes(fileName));
                // PdfStamper stamper = new PdfStamper(pdfReader, ms);
                PdfStamper stamper1 = new PdfStamper(pdfReader1, new System.IO.FileStream(fileName, FileMode.Create, FileAccess.Write));
                for (int p = 1; p <= pdfReader1.NumberOfPages; p++)
                {
                    Rectangle mediabox = pdfReader1.GetPageSize(1);
                    Rectangle cropbox = pdfReader1.GetCropBox(1);
                    Rectangle r1 = pdfReader1.GetBoxSize(1, "media");
                    PdfDictionary page1 = pdfReader1.GetPageN(1);
                    Rectangle pagesize = pdfReader1.GetPageSizeWithRotation(page1);
                    if (arotiraj.IsChecked == true)
                    {
                        if (pagesize.Left - pagesize.Right > 300)
                        {
                            if (pagesize.Left - pagesize.Right < pagesize.Top - pagesize.Bottom)
                            {
                                page1.Put(PdfName.ROTATE, new PdfNumber(90));
                            }
                        }
                    }
       }
                stamper1.Close();
       pdfReader1.Close();
    }
        }

问题是Rectangle pagesize获得了未剪裁的大小。我在做什么wromg?

1 个答案:

答案 0 :(得分:0)

请查看以下常见问题解答主题:

当我阅读你问题的主题时,我认为你正在定义一个裁剪框。当我阅读您的代码时,我发现您不会改变任何内容。

你创建一个应该访问每个页面的循环,但你总是得到第一页的页面字典。

你有:

PdfDictionary page = pdfReader.GetPageN(1);

但我希望:

PdfDictionary page = pdfReader.GetPageN(p);

我不知道getOutputPageSize()方法的含义,但您也将1作为参数传递到我期望的p`。这看起来不对。

你在okreniPDF()方法中犯了同样的错误。您尝试更改第一页和仅第一页的次数与文档中的页面一样多。这非常无效。

<强>更新

显然你知道自己的错误,现在你声称你遇到的问题是另一回事。但是,您无法解释问题的本质。也许你对所见所闻的解释都是错的。

请查看https://stackoverflow.com/a/23356772/1622493了解详情。