如何在使用iTextSharp保持方向的同时缩放PDF页面? [英] How do I scale a PDF page while maintaining orientation with iTextSharp?

查看:158
本文介绍了如何在使用iTextSharp保持方向的同时缩放PDF页面?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何缩放pdf页面,同时在itextsharp中保持旋转?
我有以下内容,但我失去轮换:

How do I scale a pdf page, while maintaining rotation in itextsharp? I have the following, but I lose rotation:

    public static void ScaleToLetter(string inPDF, string outPDF)
    {
        PdfReader reader = new PdfReader(inPDF);
        Document doc = new Document(PageSize.LETTER);
        Document.Compress = true;
        PdfWriter writer = PdfWriter.GetInstance(doc, 
            new FileStream(outPDF, FileMode.Create));
        doc.Open();
        PdfContentByte cb = writer.DirectContent;
        int rotation;

        PdfImportedPage page;
        for (int pageNumber = 1; pageNumber <= reader.NumberOfPages; pageNumber++)
        {
            page = writer.GetImportedPage(reader, pageNumber);
            rotation = reader.GetPageRotation(pageNumber);

            cb.AddTemplate(page, 
                PageSize.LETTER.Width / reader.GetPageSize(pageNumber).Width, 
                0, 0, 
                PageSize.LETTER.Height / reader.GetPageSize(pageNumber).Height, 
                0, 0);
            doc.NewPage();
        }
        doc.Close();
    }


推荐答案

我有类似的问题,通过改变每页的高度和宽度,从LETTER到LETTER旋转,让它工作。换句话说,如果当前页面很薄而且很高,那么它是垂直的。但如果它是宽和短,那么它是水平的,我应该旋转页面。

I had a similar issue, and got it working by changing the height and width of each page, from LETTER to LETTER rotated. In other words, if the current page is thin and tall then it is vertical. But if it is wide and short, then it is horizontal and I should rotate the page.

这是你的代码改变了:

    public static void ScaleToLetter(string inPDF, string outPDF)
    {
        PdfReader reader = new PdfReader(inPDF);
        Document doc = new Document(PageSize.LETTER);
        Document.Compress = true;
        PdfWriter writer = PdfWriter.GetInstance(doc,
            new FileStream(outPDF, FileMode.Create));
        doc.Open();
        PdfContentByte cb = writer.DirectContent;

        PdfImportedPage page;
        for (int pageNumber = 1; pageNumber <= reader.NumberOfPages; pageNumber++)
        {
            page = writer.GetImportedPage(reader, pageNumber);

            if (page.Width <= page.Height)
                doc.SetPageSize(PageSize.LETTER);
            else 
                doc.SetPageSize(PageSize.LETTER.Rotate());
            doc.NewPage();

            cb.AddTemplate(page,
                doc.PageSize.Width / reader.GetPageSize(pageNumber).Width,
                0, 0,
                doc.PageSize.Height / reader.GetPageSize(pageNumber).Height,
                0, 0);
        }
        doc.Close();
    }

我还需要约束比例,所以我最终得到了这个:

I also needed to constrain proportions, so I ended up with this:

    public static void ScaleToA4(string inPDF, string outPDF)
    {
        var reader = new PdfReader(new MemoryStream(File.ReadAllBytes(inPDF)));
        var document = new Document(PageSize.A4);
        var ms = new MemoryStream();
        var writer = PdfWriter.GetInstance(document, ms);
        document.Open();
        var cb = writer.DirectContent;

        for (var pageNumber = 1; pageNumber <= reader.NumberOfPages; pageNumber++)
        {
            var page = writer.GetImportedPage(reader, pageNumber);
            document.SetPageSize(page.Width <= page.Height ? 
                PageSize.A4 : PageSize.A4.Rotate());
            document.NewPage();

            var widthFactor = document.PageSize.Width / page.Width;
            var heightFactor = document.PageSize.Height / page.Height;
            var factor = Math.Min(widthFactor, heightFactor);

            var offsetX = (document.PageSize.Width - (page.Width * factor)) / 2;
            var offsetY = (document.PageSize.Height - (page.Height * factor)) / 2;
            cb.AddTemplate(page, factor, 0, 0, factor, offsetX, offsetY);
        }
        document.Close();
        File.WriteAllBytes(outPDF, ms.GetBuffer());
    }

这篇关于如何在使用iTextSharp保持方向的同时缩放PDF页面?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆