使用PDFsharp连接PDF会返回空PDF

时间:2016-05-09 06:40:04

标签: c# pdf concatenation pdfsharp

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

我的代码:

        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());
        }

我想将其作为byte[]返回,因为我稍后会使用它们:

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

这会返回包含正确页数的PDF,但全部为空白。

2 个答案:

答案 0 :(得分:2)

您在评论中说明这些文件来自SSRS。

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

  

对于ReportExecutionService对象上Render方法的DeviceSettings参数,传递此值:

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

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

答案 1 :(得分:-1)

我使用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;
    }