简体   繁体   中英

How to Convert itextsharp document to byte array

I am trying to merge two PDF in this method but after successfully adding, I am unable to convert iTextSharp.text.Document into byte array . Please help me.

protected byte[] MergePDFs(byte[] First, byte[] Second, string RptTitle)
{

    iTextSharp.text.Document doc = new iTextSharp.text.Document();
    iTextSharp.text.pdf.PdfReader reader = null;
    int numberOfPages = 0;
    int currentPageNumber = 0;
    iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, MemStream);
    doc.Open();
    iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent;
    iTextSharp.text.pdf.PdfImportedPage page = null;
    //Third, append all the PDFs--THIS IS THE MAGIC PART
    if (First != null)
    {
        reader = new iTextSharp.text.pdf.PdfReader(First);
        numberOfPages = reader.NumberOfPages;
        currentPageNumber = 0;
        while ((currentPageNumber < numberOfPages))
        {
            currentPageNumber += 1;
            doc.SetPageSize(iTextSharp.text.PageSize.A4);
            doc.NewPage();
            page = writer.GetImportedPage(reader, currentPageNumber);
            //we know that the page would always be in Potrait Format
            cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 1);

        }
    }

    if (Second != null)
    {
        reader = new iTextSharp.text.pdf.PdfReader(Second);
        numberOfPages = reader.NumberOfPages;
        currentPageNumber = 0;
        while ((currentPageNumber < numberOfPages))
        {
            currentPageNumber += 1;
            doc.SetPageSize(iTextSharp.text.PageSize.A4.Rotate());
            //.Rotate());
            doc.NewPage();
            page = writer.GetImportedPage(reader, currentPageNumber);
            //we know that the page would always be in LandScape Format
            //  cb.AddTemplate(page,0, -1f, 1f, 0,0, reader.GetPageSizeWithRotation(currentPageNumber).Height+300);
            cb.AddTemplate(page, 1, 0, 0, 1, 0, 0);
        }
    }

    doc.Close();
    byte[] cc = StringToByteArray(doc.ToString());
    return cc;

I don't know where you people get this examples, they are completely wrong.

First, use PdfCopy , not PdfWriter . That way the correct page size and orientation will be correctly imported.

Second, if your MemStream is a MemoryStream you would use MemStream.ToArray() to get the PDF bytes.

PS: Where did that invention of doc.ToString() come from? It's completely rubbish.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM