Concatenate PDF files with PDFSharp return blank pages
Asked Answered
I

3

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"));
}
Inquisitive answered 15/10, 2011 at 18:17 Comment(0)
K
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.

Kierkegaard answered 15/2, 2013 at 11:58 Comment(1)
If you don't want to modify all the dimensions, it worked with just "<DeviceInfo><OutputFormat>PDF</OutputFormat><HumanReadablePDF>True</HumanReadablePDF></DeviceInfo>" for me.Daiquiri
G
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

Graniah answered 16/10, 2011 at 5:54 Comment(1)
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?Tinsley
I
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");
}
Inquisitive answered 17/10, 2011 at 9:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.