合并pdf文件页面大小

问题描述

我使用 itext7 PdfMerger 合并 pdf 文件, 但页面大小是从源文件复制的。 - 所以每个页面都有不同的大小 - 根据原始大小。 我希望合并的输出文件中的页面大小相等。 (即 A4 旋转)

 using(var ms = new MemoryStream()) {
   var pdfCombined = new PdfDocument(new PdfWriter(ms));
   var merger = new PdfMerger(pdfCombined);

   using(var pdfStream = file.OpenReadStream()) {

     var pdfReader = new PdfDocument(new PdfReader(pdfStream));

     merger.Merge(pdfReader,1,pdfReader.GetNumberOfPages());
     pdfReader.Close();
   }
 }

解决方法

private void Resize(Stream original,Stream stream)
    {
        original.Position = 0;
        stream.Position = 0;
        var orig = new PdfDocument(new PdfReader(original));
        var pdf = new PdfDocument(new PdfWriter(stream));
        pdf.GetWriter().SetCloseStream(false);
        var doc = new Document(pdf,PageSize);

        var pageSize = orig.GetPage(1).GetPageSizeWithRotation();

        var pageWidth = pageSize.GetWidth();
        var destWidth = PageSize.GetWidth();

        if (pageWidth > destWidth)
        {

            var transformationMatrix = AffineTransform.GetScaleInstance(
                pageWidth / destWidth / 2,pageSize.GetHeight() / PageSize.GetHeight() / 2);

            for (int i = 1; i <= orig.GetNumberOfPages(); i++)
            {
                var page = orig.GetPage(i);
                var formXObject = page.CopyAsFormXObject(pdf);
                var canvas = new PdfCanvas(pdf.AddNewPage(PageSize));
                canvas.ConcatMatrix(transformationMatrix);
                canvas.AddXObjectAt(formXObject,0);
            }

            doc.Close();
        }
    }