Необходимо создать файл PDF из C # с другим файлом PDF в качестве фонового водяного знака - PullRequest
6 голосов
/ 19 ноября 2010

Я ищу решение, которое позволило бы мне создать PDF-файл из C #, который также сливался бы в отдельный статический PDF-файл в качестве фонового водяного знака.

Я работаю над системой, которая будетпозволяют пользователям создавать PDF-версию своего счета.Вместо того, чтобы пытаться воссоздать все функции счетов в C #, я думаю, что самым простым решением было бы использовать PDF-версию для пустого счета (созданного из Adobe Illustrator) в качестве фонового водяного знака и просто наложить на детали динамического счета сверху.*

Я просматривал активные отчеты из Data Dynamics, но не похоже, что у них есть возможность наложить или объединить отчет в существующий файл PDF.

Есть ли другие .NETPDF отчет продукта, который имеет такую ​​возможность?

Ответы [ 3 ]

13 голосов
/ 19 ноября 2010

Спасибо, бхавинп.Похоже, что iText делает то же самое и работает именно так, как я и надеялся.

Для всех, кто пытается объединить файлы PDF и наложить их, может помочь следующий пример кода, основанный на использовании библиотеки iTextPDF.

Файл результатов представляет собой комбинацию оригинала и фона

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;


namespace iTextTest
{
    class Program
    {
                        /** The original PDF file. */
        const String Original = @"C:\Jobs\InvoiceSource.pdf";
        const String Background = @"C:\Jobs\InvoiceTemplate.pdf";
        const String Result = @"C:\Jobs\InvoiceOutput.pdf";

        static void Main(string[] args)
        {
            ManipulatePdf(Original, Background, Result);
        }

        static void ManipulatePdf(String src, String stationery, String dest)
        {
            // Create readers
            PdfReader reader = new PdfReader(src);
            PdfReader sReader = new PdfReader(stationery);
            // Create the stamper
            PdfStamper stamper = new PdfStamper(reader, new FileStream(dest, FileMode.Create));
            // Add the stationery to each page
            PdfImportedPage page = stamper.GetImportedPage(sReader, 1);
            int n = reader.NumberOfPages;
            PdfContentByte background;
            for (int i = 1; i <= n; i++)
            {
                background = stamper.GetUnderContent(i);
                background.AddTemplate(page, 0, 0);
            }
            // CLose the stamper
            stamper.Close();
        }


    }
}
3 голосов
/ 25 октября 2017

Я сталкивался с этим вопросом и не мог использовать библиотеку iTextSharp из-за лицензии на бесплатную версию

Лицензия iText AGPL предназначена для разработчиков, которые хотят поделиться своим исходным кодом всего приложения ссообщество open source как свободное программное обеспечение на условиях AGPL «copyleft».

Однако я обнаружил, что PDFSharp работает с использованием приведенного ниже кода.

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;

namespace PDFTest
{
    class Program
    {
        static Stream Main(string[] args)
        {
            using (PdfDocument originalDocument= PdfReader.Open("C:\\MainDocument.pdf", PdfDocumentOpenMode.Import))
            using (PdfDocument outputPdf = new PdfDocument())
            {
                foreach (PdfPage page in originalDocument.Pages)
                {
                    outputPdf.AddPage(page);
                }
                var background = XImage.FromFile("C:\\Watermark.pdf");
                foreach (PdfPage page in outputPdf.Pages)
                {
                    XGraphics graphics = XGraphics.FromPdfPage(page);
                    graphics.DrawImage(background, 1, 1);

                }
                MemoryStream stream = new MemoryStream();
                outputPdf.Save("C:\\OutputFile.pdf");
            }
        }
    }
}
2 голосов
/ 19 ноября 2010

Используйте это.http://itextpdf.com/ Работает как с Java, так и с .NET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...