6

I try to concatenate 2 PDF data from rdlc report.

The problem is the result is blank pages.

I don't know why, could someone help me please.

here is my code:

private ActionResult ConcatPdf(byte[] pdfData1, byte[] pdfData2)
{
    MemoryStream ms1 = new MemoryStream(pdfData1);
    MemoryStream ms2 = new MemoryStream(pdfData2);

    PdfDocument inputDoc1 = PdfReader.Open(ms1, PdfDocumentOpenMode.Import);
    PdfDocument inputDoc2 = PdfReader.Open(ms2, PdfDocumentOpenMode.Import);

    PdfDocument outputDoc = new PdfDocument();

    foreach (PdfPage page in inputDoc1.Pages)
    {
        outputDoc.AddPage(page);
    }

    foreach (PdfPage page in inputDoc2.Pages)
    {
        outputDoc.AddPage(page);
    }

    MemoryStream outputMs = new MemoryStream();
    outputDoc.Save(outputMs);

    return File(outputMs.ToArray(), "application/pdf");
}

In generate report function look like this:

public ActionResult TestPDF(int id)
{
    // Set report path.
    LocalReport rep = viewer.LocalReport;
    rep.ReportPath = Server.MapPath("~/Reports/rptExternalTransferIndividual.rdlc");
    rep.DataSources.Clear();


    //
    // Set data and parameter to report.
    //
    ...
    ...

    return ConcatPdf(viewer.LocalReport.Render("PDF"), viewer.LocalReport.Render("PDF"));
}
TaeV
  • 746
  • 12
  • 19

3 Answers3

5

I know this is old, but add HumanReadablePDF:

 string deviceInfo = "<DeviceInfo>" +
                    "  <OutputFormat>PDF</OutputFormat>" +
                    "  <PageWidth>29.7cm</PageWidth>" +
                    "  <PageHeight>21cm</PageHeight>" +
                    "  <MarginTop>0cm</MarginTop>" +
                    "  <MarginLeft>0cm</MarginLeft>" +
                    "  <MarginRight>0cm</MarginRight>" +
                    "  <MarginBottom>0cm</MarginBottom>" +
                    "  <HumanReadablePDF>True</HumanReadablePDF>" +
                    "</DeviceInfo>";

  byte[] reportBytes = LocalReport.Render(
                "PDF", deviceInfo, out mimeType, out encoding,
                out extension,
                out streamids, out warnings);

Then return the byte array to PdfSharp.

nik0lai
  • 2,585
  • 23
  • 37
1

Maybe there's something unusual about the PDF files generated from Report Viewer. We need sample files to check it.

See also:

http://forum.pdfsharp.net/viewtopic.php?f=3&t=1818&p=5174

http://forum.pdfsharp.net/viewtopic.php?f=3&t=1730

  • Thanks for this, I was experiencing the same issue with Report Viewer generated PDFs and the information in the 2nd link fixed it...out of interest, will that fix be incorporated into future version of the library? – wheelibin Sep 12 '12 at 10:07
0

I use iTextSharp to do the same thing.

Passing same parameter --> viewer.LocalReport.Render("PDF"). It work well.

Here is my code:

private ActionResult ConcatPdf(List<byte[]> pdfDataList)
{
    MemoryStream outputMS = new MemoryStream();
    Document document = new Document();
    PdfCopy writer = new PdfCopy(document, outputMS);
    PdfImportedPage page = null;

    document.Open();

    foreach (byte[] pdfData in pdfDataList)
    {
        PdfReader reader = new PdfReader(pdfData);
        int n = reader.NumberOfPages;

        for (int i = 1; i <= n; i++)
        {
            page = writer.GetImportedPage(reader, i);
            writer.AddPage(page);
        }

        PRAcroForm form = reader.AcroForm;
        if (form != null)
            writer.CopyAcroForm(reader);
    }

    document.Close();

    return File(outputMS.ToArray(), "application/pdf");
}
TaeV
  • 746
  • 12
  • 19