Обрезка PDF с itextsharp 5 приводит к повреждению PDF - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу прочитать файл PDF, используя itextsharp 5, и создать новый файл PDF с левой половиной каждой страницы исходного PDF, отбрасывая правую половину.Я написал следующий код, но результат поврежден и не может быть открыт с помощью Acrobat Reader (хотя его открытие в Chrome работает).Как я могу сделать PDF, который работает с Acrobat Reader?

private byte[] ObtenerMitadPdf(byte[] Contenido)
    {
        using (var pdfReader = new PdfReader(Contenido))
        {
            using (var memoryStream = new MemoryStream())
            {
                using (var documento = new Document())
                using (var pdfWriter = PdfWriter.GetInstance(documento, memoryStream))
                {
                    pdfWriter.CloseStream = false;
                    documento.Open();
                    for (int i = 1; i <= pdfReader.NumberOfPages; i++)
                    {
                        var pagina = pdfWriter.GetImportedPage(pdfReader, i);
                        var tamañoPagina = pdfReader.GetPageSizeWithRotation(i);
                        var nuevoTamaño = new Rectangle(tamañoPagina.Left, tamañoPagina.Bottom,
                            tamañoPagina.Left + (tamañoPagina.Width / 2), tamañoPagina.Top, tamañoPagina.Rotation);
                        if (tamañoPagina.Rotation == 90)
                        {
                            pdfWriter.DirectContent.AddTemplate(pagina, 0, -1, 1, 0, 0, tamañoPagina.Height);
                        }
                        else
                        {
                            pdfWriter.DirectContent.AddTemplate(pagina, 0, 0);
                        }
                        documento.SetPageSize(nuevoTamaño);
                        documento.NewPage();
                    }
                }
                return memoryStream.ToArray();
            }
        }
    }

1 Ответ

0 голосов
/ 26 сентября 2018

Мне наконец удалось заставить его работать!

private byte[] ObtenerMitadPdf(byte[] Contenido)
    {
        using (var pdfReader = new PdfReader(Contenido))
        {
            using (var memoryStream = new MemoryStream())
            {
                using (var stamper = new PdfStamper(pdfReader, memoryStream))
                {
                    for (int i = 1; i <= pdfReader.NumberOfPages; i++)
                    {
                        var pagina = pdfReader.GetPageN(i);
                        var tamañoPagina = pdfReader.GetPageSizeWithRotation(i);
                        var mediaBox = new PdfRectangle(tamañoPagina.Left, tamañoPagina.Bottom,
                            tamañoPagina.Left + (tamañoPagina.Width / 2), tamañoPagina.Top, tamañoPagina.Rotation);
                        pagina.Put(PdfName.MEDIABOX, mediaBox);
                        stamper.MarkUsed(pagina);
                    }
                }
                return memoryStream.ToArray();                   
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...