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

건물문서

물론 데이터가 포함된 PDF 문서를 생성해야 합니다. 그러나 종종 PDF 파일을 비밀번호로 암호화하고 싶을 수도 있습니다. 그리고 일반적으로 출력 파일에 PDF 메타데이터를 추가하려고 합니다.

PDF 파일을 암호화하도록 생성기에 지시하는 방법을 알아보려면 계속 읽으세요. 문서 작성자 및 키워드를 지정하는 방법.

이 기사는 PDF 생성을 위한 Layout API에 관한 시리즈의 일부입니다. API를 처음 사용하는 경우 Layout API 시작하기 부분을 먼저 읽어보세요.

PDF 문서 작성

Create & Generate

Layout API의 진입점은 PdfDocumentBuilder 클래스입니다. 먼저 Create 메소드를 사용하여 클래스의 인스턴스를 생성합니다. PDF를 생성하려면 클래스의 Generate 메소드를 호출합니다.

Generate는 출력을 파일이나 스트림에 저장할 수 있습니다. 두 메서드 버전 모두 두 번째 매개 변수로 Action<Document> 유형의 대리자가 필요합니다. 대리인에서는 얻고 싶은 문서를 설명합니다. 라이브러리는 설명을 기반으로 PDF를 생성합니다.

Docotic.Pdf 라이브러리 9.5.17664-dev 레이아웃 애드온 9.5.17664-dev
회귀 테스트 14,820건의 테스트 통과 총 NuGet 다운로드 4,998,853

암호화

출력 PDF를 암호화하려면 Generate 메서드 전에 Encryption 메서드를 호출하세요.

암호화 핸들러를 생성하고 제공해야 합니다. PDF를 비밀번호로 암호화하려면 PdfStandardEncryptionHandler 유형의 핸들러를 사용하세요.

PdfDocumentBuilder.Create()
    .Encryption(new PdfStandardEncryptionHandler("owner", "user"))
    .Generate("encrypted-with-password.pdf", doc => doc.Pages(_ => { }));

인증서로 PDF를 암호화할 수도 있습니다. PDF 문서 암호화 항목을 확인하세요. 여기에는 암호화 처리기 및 PDF 권한에 대한 자세한 정보가 포함되어 있습니다.

PDF 파일 메타데이터

일부 작업 흐름에서는 출력 PDF에 적절한 PDF 키워드와 PDF 작성자를 지정하는 것이 매우 중요합니다. Layout API는 이를 위한 쉬운 방법을 제공합니다. Generate 메서드 전에 Info 메서드를 호출하고 대리자에 메타데이터 값을 제공합니다.

PdfDocumentBuilder.Create()
    .Info(info =>
    {
        info.Author = $"{Environment.UserName}";
        info.Title = "Generate encrypted PDF with custom metadata";
        info.Keywords = "Metadata keywords encryption";
    })
    .Generate("metadata.pdf", doc => doc.Pages(_ => { }));

옵션

동일한 콘텐츠에 대해 라이브러리는 내부 구조가 다른 PDF 파일을 생성할 수 있습니다. 이러한 옵션은 출력 PDF에 영향을 미칩니다.

버전

출력 PDF의 최소 PDF 형식 버전을 설정하려면 Version 방법을 사용하십시오.

PdfDocumentBuilder.Create()
    .Version(PdfVersion.Pdf17)
    .Generate("version.pdf", doc => doc.Pages(_ => { }));

라이브러리에서는 지정된 버전보다 더 큰 버전의 PDF를 생성할 수 있습니다. 문서 내용에 최신 버전이 필요할 때 발생합니다. 다르게 말하면: 문서가 지정된 PDF 표준 버전에서 사용할 수 없는 기능을 사용하는 경우입니다.

객체 스트림

기본적으로 라이브러리는 생성된 PDF의 개체 스트림을 사용합니다. 이는 더 작고 더 나은 압축 파일을 생성하는 데 도움이 됩니다.

ObjectStreams 메소드를 사용하여 객체 스트림 없이 PDF 파일을 생성하도록 API에 지시할 수 있습니다.

PdfDocumentBuilder.Create()
    .ObjectStreams(false)
    .Generate("no-object-streams.pdf", doc => doc.Pages(_ => { }));

규제 요구 사항이 없는 한 객체 스트림을 계속 사용하는 것이 좋습니다. 또는 워크플로의 일부 다른 부분이 개체 스트림을 사용하여 문서를 처리할 수 없는 경우입니다.

스트림 제공자

라이브러리는 스트림을 중간 저장소로 사용합니다. PDF를 생성할 때 이미지와 기타 큰 개체에 대해 생성됩니다. 라이브러리는 스트림 공급자를 통해 스트림을 가져옵니다. 항상 현재 PdfDocumentBuilder 인스턴스와 연관된 것이 하나 있습니다.

라이브러리는 기본적으로 PdfMixedStorageStreamProvider 를 사용합니다. 이 스트림 공급자 구현은 데이터를 메모리에 유지하는 스트림을 제공합니다. 이러한 스트림은 데이터가 너무 많으면 해당 내용을 임시 파일로 플러시합니다. 이를 통해 메모리 소비를 줄이고 LOH 조각화를 방지할 수 있습니다.

PDF 파일을 생성할 때 IPdfStreamProvider 인터페이스의 자체 구현을 사용할 수 있습니다. 변경 이유 중 하나는 느리거나 비용이 많이 드는 디스크 작업일 수 있습니다. 클라우드 환경이 이 설명에 적합할 수 있습니다.

이 코드는 임시 파일 없이 메모리에서 PDF를 완전히 생성하는 방법을 보여줍니다. 기본 옵션보다 더 많은 메모리가 필요하다는 점에 유의하세요.

using (var memoryOnlyProvider = new PdfMemoryStreamProvider())
{
    PdfDocumentBuilder.Create()
        .StreamProvider(memoryOnlyProvider)
        .Generate("created-without-temp-files.pdf", doc => doc.Pages(_ => { }));
}

라이브러리는 결국 스트림 공급자를 통해 얻는 모든 스트림에 대해 Dispose 를 호출합니다. 스트림 공급자 인스턴스를 직접 삭제해야 합니다.