Better way to merge pdfs
If you change the first line from  


byte[] output;  



to  

byte[] output = GetBytes(context, model, viewName, configureSettings);  


and then revert the if condition you can return early.   

So the remaining code (if the filename is valid and the file exists) could become  


by stacking the usings which saves some horizontal spacing 
by using the byte[] output for the PdfReader ctor  
and using copyStream.GetBuffer() instead of calling its ToArray() method which eleminates the creation of an additional array  


like so  

public byte[] GeneratePdfOutput(ControllerContext context, object model = null, string viewName = null,
    Action&lt;PdfWriter, Document&gt; configureSettings = null, string filename = null)
{
    byte[] output = GetBytes(context, model, viewName, configureSettings);  

    if (string.IsNullOrEmpty(filename) || !File.Exists(filename))
    {
        return output;
    }

    using (var copyDoc = new Document())
    using (var copyStream = new MemoryStream())
    {
        copyDoc.Open();

        PdfCopy copy = new PdfCopy(copyDoc, copyStream);
        copy.CloseStream = false;
        copy.AddDocument(new PdfReader(output));

        using (var reader = new PdfReader(filename))
        {
            reader.ConsolidateNamedDestinations();

            for (int i = 1; i &lt;= reader.NumberOfPages; i++)
            {
                PdfImportedPage page = copy.GetImportedPage(reader, i);
                copy.AddPage(page);
            }
        }

        copy.Close();
        copyDoc.Close();
        return copyStream.GetBuffer();
    }
}