2011-10-15 15 views
6

Provo a concatenare 2 dati PDF dal rapporto rdlc.Concatena file PDF con PDFSharp restituisce pagine vuote

Il problema è il risultato è pagine vuote.

Non so perché, qualcuno potrebbe aiutarmi per favore.

Ecco il mio codice:

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

Nel generare funzione di report simile al seguente:

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

risposta

1

Forse c'è qualcosa di insolito i file PDF generati da Report Viewer. Abbiamo bisogno di file di esempio per controllarlo.

Consulta anche:

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

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

+0

Grazie per questo, ho riscontrato lo stesso problema con i PDF generati da Report Viewer e le informazioni nel 2 ° collegamento l'abbiamo risolto ... per interesse, la correzione sarà incorporata nella versione futura della libreria? – wheelibin

0

Io uso iTextSharp a fare la stessa cosa.

Passa lo stesso parametro -> viewer.LocalReport.Render ("PDF"). Funziona bene.

Ecco il mio codice:

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

So che questo è vecchio, ma aggiungo 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); 

poi tornare l'array di byte a PDFsharp.

+0

Questo ha funzionato per me. Grazie! –

+1

Se non si desidera modificare tutte le dimensioni, ha funzionato solo con " PDF True" 'per me. –