이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.

C# 및 VB.NET에서 PDF 문서 만들기

.NET 개발자로서 PDF 보고서, 송장, 영수증 또는 기타 문서를 생성해야 합니까? Docotic.Pdf 라이브러리를 사용하여 .NET Core, .NET Standard 또는 .NET Framework 프로젝트에서 PDF 문서를 생성하세요. PDF 형식에 대해 전혀 모르더라도 쉽게 이 작업을 수행할 수 있습니다.

C# 및 VB.NET에서 PDF 문서 만들기

PDF 생성을 위한 .NET API

Docotic.Pdf는 외부 종속성이 없는 100% 관리 코드 라이브러리입니다. 이를 사용하여 Windows, Linux, Amazon 및 Azure 클라우드 환경에서 PDF 문서를 만들 수 있습니다. macOS, iOS, Android 등의 클라우드 환경도 괜찮습니다.

라이브러리는 PDF 문서를 생성하는 다양한 방법을 제공합니다. 첫째, 고급 레이아웃 API를 사용하여 페이지 머리글과 바닥글, 표, 단락을 추가하고 자동으로 페이지의 콘텐츠를 나눌 수 있습니다. 레이아웃 API는 무료 Docotic.Pdf.Layout 추가 기능에서 사용할 수 있습니다.

또는 HTML-PDF 추가 기능(무료)을 사용하여 HTML 템플릿을 기반으로 PDF 문서를 만들 수 있습니다. 자세한 내용은 HTML을 PDF로 변환 문서를 읽어보세요.

그리고 핵심 라이브러리 API를 사용하여 PDF 문서를 생성할 수 있습니다. 모든 PDF 컨텐츠를 지원합니다 - 텍스트, 이미지, 벡터 그래픽, 양식, 주석, 북마크, 레이어 및 다른 사람. 그러나 핵심 API는 헤더, 테이블, 섹션과 같은 상위 수준 레이아웃 구성 요소를 지원하지 않습니다. 핵심 라이브러리를 사용하면 콘텐츠를 측정하고 PDF 페이지 간에 직접 분할해야 합니다.

Docotic.Pdf 라이브러리 9.3.17014-dev 레이아웃 애드온 9.3.17014-dev HTML을 PDF로 변환하는 추가 기능 9.3.17014-dev
회귀 테스트 14,645건의 테스트 통과 총 NuGet 다운로드 4,172,488

핵심 라이브러리와 함께 추가 기능을 사용할 수도 있습니다. 예를 들어 레이아웃 API를 사용하여 PDF 문서를 생성한 다음 핵심 라이브러리로 더 많은 콘텐츠를 추가합니다. 레이아웃 추가 기능은 .NET Standard 2.1, .NET Core, .NET 5 및 최신 프레임워크를 지원합니다. 핵심 라이브러리와 HTML-PDF 추가 기능은 .NET Standard 2.0, .NET 4.7.2+, .NET Core, .NET 5 이상을 지원합니다.

Docotic.Pdf 추가 기능은 NuGet에서 사용할 수 있으며 라이브러리의 바이너리가 포함된 zip에 포함되어 있습니다. 평가 모드 제한 없이 라이브러리를 사용해 보려면 여기에서 시간 제한이 있는 무료 라이센스 키를 얻을 수 있습니다.

레이아웃 API를 사용하여 PDF 문서 만들기

이 C# 샘플은 레이아웃 API를 사용하여 C#에서 PDF 문서를 생성하는 방법을 보여줍니다:

PdfDocumentBuilder
    .Create()
    .Generate("long-text.pdf", doc => doc.Pages(page =>
    {
        string text = File.ReadAllText(@"C# in Depth, Fourth Edition.txt");
        page.Content().Text(text);

        page.Footer().AlignCenter().Text(t => t.CurrentPageNumber());
    }));

코드는 텍스트 파일을 PDF로 변환합니다. 긴 텍스트를 페이지로 분할하고 바닥글 영역에 페이지 번호도 그립니다. 텍스트 높이를 계산하거나 페이지 수를 계산할 필요가 없습니다. 라이브러리가 이러한 일상적인 작업을 처리합니다.

레이아웃 API는 유창한 API입니다. 대부분의 호출은 서로 연결될 수 있으므로 "선언적" 프레임워크를 사용하는 것보다 더 간결한 코드를 작성할 수 있습니다. API를 더 자세히 검토해 보겠습니다.

PDF 문서 속성 설정

PDF 생성은 PdfDocumentBuilder 클래스로 시작됩니다. 생성된 PDF 문서의 속성을 지정할 수 있습니다. 예를 들어 메타데이터, 암호화, PDF 버전을 설정하거나 빠른 웹 보기를 활성화할 수 있습니다. 기본 C# 샘플은 다음과 같습니다:

PdfDocumentBuilder
    .Create()
    .Encryption(new PdfStandardEncryptionHandler("owner", "user"))
    .Info(info =>
    {
        info.Author = "Docotic.Pdf library";
        info.Title = "How to create PDF in .NET";
        info.Keywords = "C#, VB.NET";
    })
    .Version(PdfVersion.Pdf16)
    .Generate("result.pdf", doc => doc.Pages(_ => {}));

이 샘플은 사용자 정의 메타데이터가 포함된 비밀번호로 보호된 빈 PDF 문서를 생성하고 이를 파일에 저장합니다. 문서를 스트림에 저장할 수도 있습니다. PdfDocumentBuilder.Generate(Stream, ..) 오버로드를 사용하면 됩니다.

PdfDocumentBuilder를 설정하면 이제 PDF 문서에 내용을 채울 차례입니다. 레이아웃 API는 공통 리소스(타이포그래피, 이미지)를 등록하고 PDF 페이지 콘텐츠를 정의하기 위한 Document 객체를 제공합니다. PdfDocumentBuilder.Generate 메소드의 두 번째 인수에서 Document를 구성할 수 있습니다. PDF 페이지를 설정하는 방법을 알아 보겠습니다.

PDF 페이지 레이아웃 정의

이 C# 샘플은 가로 방향의 A3 페이지로 구성된 PDF 문서를 만드는 방법을 보여줍니다:

PdfDocumentBuilder.Create().Generate("pages.pdf", doc =>
{
    doc.Pages((PageLayout page) =>
    {
        page.Size(PdfPaperSize.A3, PdfPaperOrientation.Landscape)
            .MarginVertical(50)
            .MarginHorizontal(40);

        page.Header().PaddingBottom(30).AlignRight().Text("Hello PDF");

        page.Content().Column(c =>
        {
            c.Item().Text("Page 1");
            c.Item().PageBreak();
            c.Item().Text("Page 2");
        });

        page.Footer().Text(t => t.CurrentPageNumber());
    });
});

Document.Pages() 메서드는 하나 이상의 페이지에 대한 레이아웃을 정의합니다. 먼저, 샘플 코드는 크기, 방향, 여백 등 모든 페이지에 대한 공통 설정을 지정합니다. 콘텐츠 방향, 기본 텍스트 스타일 또는 배경색을 지정할 수도 있습니다.

그런 다음 샘플은 페이지 레이아웃과 콘텐츠를 생성합니다. PageLayout 클래스는 다음 슬롯에 페이지 콘텐츠를 배치하는 방법을 제공합니다:

  • Background() - 다른 콘텐츠로 덮힌 배경 레이어
  • Header() - 모든 페이지의 공통 헤더
  • Content() - 메인 페이지 콘텐츠
  • Footer() - 모든 페이지에 대한 공통 바닥글
  • Foreground() - 다른 콘텐츠를 덮는 전경 레이어

레이아웃 엔진은 PageLayout.Content() 슬롯에 추가된 콘텐츠에 따라 페이지를 생성합니다. 다른 슬롯은 모든 페이지에서 반복됩니다. LayoutContainer 클래스를 사용하여 슬롯에 콘텐츠를 추가할 수 있습니다. 이는 임의의 레이아웃, 테이블, 텍스트 또는 이미지를 생성할 수 있는 레이아웃 API의 핵심 구성 요소입니다.

이전 샘플에서는 콘텐츠를 수직으로 쌓는 LayoutContainer.Column 메서드를 사용합니다. 해당 열에는 첫 번째 페이지의 텍스트 청크, 명시적인 페이지 나누기, 두 번째 페이지의 텍스트 청크 등 3개의 항목이 포함되어 있습니다.

LayoutContainer.Row 메서드도 있습니다. 행과 열을 함께 사용하여 여러 열로 구성된 PDF 문서를 만드는 방법을 살펴보세요.

PDF 문서에서 다양한 페이지 레이아웃을 혼합할 수 있습니다. Document.Pages 메소드를 여러 번 호출하면 됩니다. 예제는 GitHub의 PDF 페이지 레이아웃 설정 샘플을 참조하세요.

PDF 문서에 텍스트 추가

텍스트는 PDF 문서의 중요한 부분입니다. LayoutContainer.Text 메서드를 사용하여 텍스트를 추가할 수 있습니다. 앞서 LayoutContainer.Text(string) 오버로드에 대한 사용 사례를 살펴보았습니다. 이 메서드의 또 다른 오버로드를 살펴보겠습니다:

PdfDocumentBuilder.Create().Generate("text.pdf", doc =>
{
    doc.Pages(p => p.Content().Text(text =>
    {
        text.Span("VB.NET").Style(t => t.Strong);
        text.Span(" is a multi-paradigm, object-oriented programming language, implemented on.NET, Mono, and the ");
        text.Hyperlink(".NET Framework", new Uri("https://dotnet.microsoft.com/en-us/download/dotnet-framework"));
        text.Line(".");

        text.Line("Microsoft launched VB.NET in 2002 as the successor to its original Visual Basic language.");
    }));
});

TextContainer 클래스는 텍스트, 링크, 페이지 번호를 그리는 메서드를 제공합니다. 현재 줄에 텍스트를 추가하려면 'Span' 및 'Line' 메서드를 사용하세요. 'Line' 메서드는 현재 줄을 추가로 완성합니다. 이 샘플에서는 외부 리소스 링크를 추가하는 'Hyperlink' 메서드도 사용합니다.

다음은 페이지 바닥글에 동적 페이지 번호를 사용하는 방법을 보여주는 또 다른 샘플입니다:

PdfDocumentBuilder.Create().Generate("footer.pdf", doc =>
{
    doc.Pages(p => p.Footer().AlignRight().Text(text =>
    {
        text.Style(t => t.Parent.FontColor(new PdfRgbColor(255, 0, 0)));

        text.CurrentPageNumber();
        text.Span(" / ");
        text.PageCount();
    }));
});

레이아웃 API는 페이지 번호 형식을 지정하는 방법을 제공합니다. 예를 들어 다음과 같이 16진수 페이지 번호를 그릴 수 있습니다:

text.CurrentPageNumber().Format(p => "0x" + p?.ToString("x2"));

C# 및 VB.NET 샘플에서 PDF 문서에 머리글 및 바닥글 추가에서는 페이지 번호 형식을 로마 숫자로 지정하는 방법을 보여줍니다.

위의 샘플에서는 Style 메서드를 사용하는 것을 볼 수 있습니다. 텍스트 스타일의 개념을 좀 더 자세히 살펴보겠습니다.

타이포그래피

텍스트 스타일을 사용하면 텍스트 모양을 사용자 정의할 수 있습니다. TextStyle 클래스는 글꼴 크기, 문자 간격, 색상 및 기타 텍스트 속성을 변경하는 메서드를 제공합니다. TextStyle 객체는 변경할 수 없으므로 모든 메서드 호출이 새로운 텍스트 스타일을 생성합니다. 다양한 레이아웃 수준에서 텍스트 스타일을 적용할 수 있습니다:

PdfDocumentBuilder.Create().Generate("text-styles.pdf", doc =>
{
    doc.Pages(page =>
    {
        page.TextStyle(TextStyle.Parent.FontSize(30));

        page.Content()
            .TextStyle(TextStyle.Parent.FontColor(new PdfRgbColor(0, 0, 255)))
            .Text(t =>
            {
                t.Style(TextStyle.Parent.Underline());

                t.Span("Hello PDF").Style(TextStyle.Parent.DirectionRightToLeft());
            });
    });
});

TextStyle.Parent 속성은 모든 텍스트 속성이 정의되지 않은 특수 스타일을 반환합니다. 이전 샘플에서는 "Hello PDF"를 파란색 밑줄이 그어진 30포인트 글꼴 크기로 역순으로(오른쪽에서 왼쪽으로) 그립니다. 다른 텍스트 스타일 상속 예는 PDF 문서의 텍스트 모양 사용자 정의 샘플을 참조하세요.

TextStyle 클래스는 관련 글꼴을 제외한 모든 항목의 맞춤설정을 지원합니다. 텍스트 스타일에 대한 사용자 정의 글꼴을 지정해야 하는 경우 Document.TextStyleWithFont 메서드를 사용하세요. 이 C# 샘플은 시스템 글꼴을 사용하는 방법을 보여줍니다:

PdfDocumentBuilder.Create().Generate("fonts.pdf", doc =>
{
    doc.Pages(page =>
    {
        TextStyle style = doc.TextStyleWithFont(SystemFont.Family("Arial").Bold());
        page.Content().Text("Bold text").Style(style);
    });
});

레이아웃 엔진은 기본적으로 사용되지 않는 글꼴 문자를 제거합니다. 이로 인해 생성된 문서는 큰 글꼴의 경우에도 작은 크기를 가질 수 있습니다. 또한 사용자 정의 글꼴 로더, 대체 글꼴, 누락된 글리프 처리기를 지정할 수도 있습니다. 자세한 내용은 PDF 문서에서 다른 글꼴 사용 샘플을 참조하세요.

레이아웃 API는 사전 정의된 스타일 컬렉션을 제공합니다. Typography 클래스를 통해 사용하거나 맞춤설정할 수 있습니다:

PdfDocumentBuilder.Create().Generate("typography.pdf", doc =>
{
    doc.Typography(t =>
    {
        var baseFont = new FileInfo("arial.ttf");
        t.Document = doc.TextStyleWithFont(baseFont);
        t.Header = t.Parent.FontSize(20).FontColor(new PdfGrayColor(20));
        t.Footer = t.Footnote;
    });

    doc.Pages(page =>
    {
        page.Header().AlignCenter().Text("Header");

        page.Content().Text(t =>
        {
            t.Line("Title").Style(t => t.Title);
            t.Line("Heading 1").Style(t => t.Heading1);
            t.Line("Regular");
        });

        page.Footer().Height(20).AlignCenter().Text(t => t.CurrentPageNumber());
    });
});

Typography 클래스를 사용하면 텍스트 스타일 참조를 유지하기 위해 변수를 사용할 필요가 없습니다. Document.Typography 메서드를 사용하여 필요한 스타일을 등록하고 나중에 Typography 개체에서 로드합니다. 타이포그래피 샘플에서 사전 정의된 스타일과 사용자 정의 스타일을 사용하는 방법을 살펴보세요.

이미지

텍스트 및 글꼴과 마찬가지로 이미지도 PDF 문서의 또 다른 기본 부분입니다. 레이아웃 API를 사용하면 다음과 같은 이미지를 추가할 수 있습니다:

PdfDocumentBuilder.Create().Generate("image.pdf", doc =>
{
    var imageFile = new FileInfo("image.jpg");
    Image image = doc.Image(imageFile);
    doc.Pages(page => page.Content().MaxWidth(200).Image(image));
});

테이블

레이아웃 API를 사용하면 테이블을 생성할 수 있습니다. 이 C# 샘플은 PDF 문서에 테이블을 추가하는 방법을 보여줍니다:

PdfDocumentBuilder.Create().Generate("table.pdf", doc =>
{
    doc.Pages(page =>
    {
        page.Content().Table(t =>
        {
            t.Columns(c =>
            {
                c.ConstantColumn(200);
                c.RelativeColumn(1);
            });

            t.Header(h =>
            {
                h.Cell().Text("Product");
                h.Cell().Text("Features");
            });

            t.Cell().Text("Docotic.Pdf");
            t.Cell().Text("Extract text, PDF to images, compress PDF");
            t.Cell().Text("Docotic.Pdf.Layout");
            t.Cell().Text("Create PDF");
        });
    });
});

복잡한 테이블을 만들 수 있습니다. 이 샘플은 셀 테두리, 배경 및 범위를 사용하는 방법을 보여줍니다.

PDF 문서는 책갈피나 목차를 생성할 수 있는 내부 링크를 지원합니다. 이 기본 C# 샘플은 레이아웃 API를 사용하여 문서 섹션에 링크를 추가하는 방법을 보여줍니다:

PdfDocumentBuilder.Create().Generate("link.pdf", doc =>
{
    doc.Pages(page =>
    {
        page.Content().Column(c =>
        {
            const string SectionName = "Chapter 1";
            c.Item().SectionLink(SectionName).Text("Link");

            c.Item().PageBreak();

            c.Item().Section(SectionName).Text("Target");
        });
    });
});

GitHub에서 PDF 문서에 목차 추가 샘플을 다운로드하여 사용해 볼 수도 있습니다.

복잡한 레이아웃

다양한 레이아웃 구성 요소를 결합하여 복잡한 PDF 문서를 생성할 수 있습니다. GitHub에서 복잡한 레이아웃으로 PDF 문서 생성 샘플을 다운로드하여 사용해 보세요.

레이아웃 API를 확장할 수 있습니다. LayoutContainer.ComponentLayoutContainer.Container 메서드를 사용하면 맞춤 구성요소를 재사용할 수 있습니다. 레이아웃 구성요소 샘플은 ILayoutComponent 인터페이스를 사용하여 맞춤 구성요소를 구현하는 방법을 보여줍니다.

결론

Docotic.Pdf 라이브러리는 C# 및 VB.NET에서 PDF 문서를 생성하는 다양한 방법을 제공합니다. 레이아웃 추가 기능을 사용하거나 사용하지 않고 처음부터 PDF 문서를 생성할 수 있습니다. 또는 HTML-PDF 추가 기능을 사용하여 HTML에서 PDF를 만들 수 있습니다.

PDF 생성에 대해 질문이 있는 경우 연락처로 문의하세요.