6
I noticed that the DLL Boleto.Net has a class BoletoBancario with the property FormatoCarne. However, I can not generate three tickets in the same page.
I would like to view a code that makes the printing of 3 billets on a page, only.
6
I noticed that the DLL Boleto.Net has a class BoletoBancario with the property FormatoCarne. However, I can not generate three tickets in the same page.
I would like to view a code that makes the printing of 3 billets on a page, only.
1
Well, unfortunately I didn’t find a solution in the library itself Boleto.Net, but I had to implement exactly the same requirement of three billets on a single sheet, and because I still had to register them, I decided to generate them asynchronously. So I managed the billets separately, and then gathered them through the library Pdfsharp with the code below my authorship.
public static byte[] SinglePageCombine(List<byte[]> boletoList)
{
    var outputDocument = new PdfDocument();
    foreach (var boletoArray in boletoList)
    {
        var outputDocumentPageCount = outputDocument.PageCount;
        try
        {
            PdfDocument inputDocument = GetPdfDocument(boletoArray);
            var inputDocumentPageCount = inputDocument.PageCount;
            if (inputDocumentPageCount == 1)
            {
                int outputDocumentPageIndex;
                if (elementsInPage >= 1 && elementsInPage < 3)
                    outputDocumentPageIndex = outputDocumentPageCount - 1;
                else
                    outputDocumentPageIndex = outputDocumentPageCount;
                PdfPage outputDocumentPage = GetPdfPage(ref outputDocument, outputDocumentPageIndex);
                PdfPage inputDocumentPage = GetPdfPage(ref inputDocument, 0);
                double width = inputDocumentPage.Width,
                        height = inputDocumentPage.Height;
                SetPageDimensions(ref outputDocumentPage, width, height);
                XPdfForm xPdfForm = GetXPdfForm(boletoArray);
                var xRect = new XRect(0, elementsInPage * 280, width, height);
                using (var pdfXGraphics = XGraphics.FromPdfPage(outputDocumentPage, XGraphicsPdfPageOptions.Append))
                {
                    pdfXGraphics.DrawImage(xPdfForm, xRect);
                }
                elementsInPage++;
                if (elementsInPage == 3)
                    elementsInPage = 0;
            }
            else
            {
                throw new Exception("Deve conter apenas uma página em cada boleto.");
            }
        }
        finally
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
    }
    byte[] outputDocumentBytes;
    using (var documentStream = new MemoryStream())
    {
        outputDocument.Save(documentStream);
        outputDocumentBytes = documentStream.ToArray();
    }
    return outputDocumentBytes;
}
private static PdfDocument GetPdfDocument(byte[] fileContent)
{
    PdfDocument inputDocument;
    using (var documentStream = new MemoryStream(fileContent))
    {
        inputDocument = PdfReader.Open(documentStream, PdfDocumentOpenMode.Import);
    }
    return inputDocument;
}
private static PdfPage GetPdfPage(ref PdfDocument pdfDocument, int pageIndex)
{
    var pdfDocumentPageCount = pdfDocument.PageCount;
    if (pageIndex < 0)
        pageIndex = 0;
    if (pdfDocumentPageCount == 0)
    {
        pdfDocument.AddPage();
    }
    else if (pageIndex > (pdfDocumentPageCount - 1))
    {
        var nextPage = pdfDocumentPageCount;
        if (nextPage == pageIndex)
            pdfDocument.AddPage();
    }
    return pdfDocument.Pages[pageIndex];
}
private static XPdfForm GetXPdfForm(byte[] fileContent)
{
    XPdfForm xPdfForm;
    using (var documentStream = new MemoryStream(fileContent))
    {
        xPdfForm = XPdfForm.FromStream(documentStream);
    }
    return xPdfForm;
}
private static void SetPageDimensions(ref PdfPage pdfPageToChange, double width, double height)
{
    pdfPageToChange.Width = width;
    pdfPageToChange.Height = height;
}
Browser other questions tagged c# dll billet
You are not signed in. Login or sign up in order to post.
Good morning, did you manage to generate the card? It’s with webforms or MVC?
– Ivan Teles
Make a mistake, what happens?
– Ezequiel da Silva Daniel
Dudu Moreira, managed to print more than one boleto on the same page?
– Fábio Christiano