使用 PDFsharp returns 空 PDF 连接 PDF

Concatenating PDF using PDFsharp returns empty PDF

我有一个存储为 list<byte[]> 的 PDF 列表。我尝试使用 PDFsharp 连接所有这些 PDF 文件,但在我操作后我得到了一个具有正确页数的 PDF,但所有页面都是空白的。看起来我丢失了一些 header 之类的东西,但我找不到在哪里。

我的代码:

        PdfDocument output = new PdfDocument();
        try
        {
            foreach (var report in reports)
            {
                using (MemoryStream stream = new MemoryStream(report))
                {

                    PdfDocument input = PdfReader.Open(stream, PdfDocumentOpenMode.Import);

                    foreach (PdfPage page in input.Pages)
                    {
                        output.AddPage(page);
                    }
                }
            }


            if (output.Pages.Count <= 0)
            {
                throw new Exception("Empty Document");
            }
            MemoryStream final = new MemoryStream();
            output.Save(final);
            output.Close();
            return final.ToArray();
        }
        catch (Exception e)
        {
            throw new Exception(e.ToString());
        }

我想 return 它作为 byte[] 因为我以后会用到它们:

return File(report, System.Net.Mime.MediaTypeNames.Application.Octet, "test.pdf");

此 returns PDF 的页数正确,但全部为空白。

我使用 iTextSharp,看看这个 saple 代码(有效)

public static byte[] PdfJoin(List<String> pdfs)
    {
        byte[] mergedPdf = null;
        using (MemoryStream ms = new MemoryStream())
        {
            using (iTextSharp.text.Document document = new iTextSharp.text.Document())
            {
                using (iTextSharp.text.pdf.PdfCopy copy = new iTextSharp.text.pdf.PdfCopy(document, ms))
                {
                    document.Open();

                    for (int i = 0; i < pdfs.Count; ++i)
                    {
                        iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(pdfs[i]);
                        // loop over the pages in that document
                        int n = reader.NumberOfPages;
                        for (int page = 0; page < n; )
                        {
                            copy.AddPage(copy.GetImportedPage(reader, ++page));
                        }
                    }
                }
            }
            mergedPdf = ms.ToArray();
        }
        return mergedPdf;
    }




 public static byte[] PdfJoin(List<byte[]> pdfs)
    {
        byte[] mergedPdf = null;
        using (MemoryStream ms = new MemoryStream())
        {
            using (iTextSharp.text.Document document = new iTextSharp.text.Document())
            {
                using (iTextSharp.text.pdf.PdfCopy copy = new iTextSharp.text.pdf.PdfCopy(document, ms))
                {
                    document.Open();

                    for (int i = 0; i < pdfs.Count; ++i)
                    {
                        iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(pdfs[i]);
                        // loop over the pages in that document
                        int n = reader.NumberOfPages;
                        for (int page = 0; page < n; )
                        {
                            copy.AddPage(copy.GetImportedPage(reader, ++page));
                        }
                    }
                }
            }
            mergedPdf = ms.ToArray();
        }
        return mergedPdf;
    }

您在评论中指出这些文件来自 SSRS。

旧版本的 PDFsharp 需要特殊的 SSRS 设置:

For the DeviceSettings parameter for the Render method on the ReportExecutionService object, pass this value:

theDeviceSettings = "<DeviceInfo><HumanReadablePDF>True</HumanReadablePDF></DeviceInfo>"; 

来源:
http://forum.pdfsharp.net/viewtopic.php?p=1613#p1613