2011-10-15 42 views
6

Intento concatenar 2 datos PDF del informe rdlc.Concatenar archivos PDF con PDFSharp devolver páginas en blanco

El problema es que el resultado son páginas en blanco.

No sé por qué, podría alguien ayudarme por favor.

aquí es mi código:

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

En Generar informe vistazo función como esta:

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

Respuesta

1

Tal vez hay algo inusual en los archivos PDF generados a partir de Visor de informes. Necesitamos archivos de muestra para verificarlo.

Consulte también:

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

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

+0

Gracias por esto, estaba teniendo el mismo problema con los PDF generados por Report Viewer y la información en el segundo enlace lo resolvió ... por interés, ¿se integrará esa corrección en la versión futura de la biblioteca? – wheelibin

0

utilizo iTextSharp a hacer lo mismo.

Pasando el mismo parámetro -> viewer.LocalReport.Render ("PDF"). Funciona bien

Aquí está mi código:

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"); 
} 
5

Sé que esto es viejo, pero añado 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); 

A continuación, volver a la matriz de bytes PDFsharp.

+0

Esto funcionó para mí. ¡Gracias! –

+1

Si no desea modificar todas las dimensiones, funcionó con '' PDF True "' para mí. –