WPF 애플리케이션에서 PDF 인쇄

다음 코드 조각은 Aspose.PDF.Drawing 라이브러리와 함께 작동합니다.

직접 인쇄

Aspose.PDF 라이브러리는 PDF 파일을 XPS로 변환할 수 있는 기능을 가지고 있습니다. 이 기능을 사용하여 문서 인쇄를 구성할 수 있습니다. 직접 인쇄를 위한 예를 살펴봅시다:

    private void Print_OnClick(object sender, RoutedEventArgs e)
    {
        var openFileDialog = new OpenFileDialog
        {
            Filter = "PDF Documents|*.pdf"
        };
        openFileDialog.ShowDialog();

        Aspose.Pdf.Document document = new Document(openFileDialog.FileName);
        var memoryStream = new MemoryStream();
        document.Save(memoryStream, SaveFormat.Xps);
        var package = Package.Open(memoryStream);

        //Xps 패키지를 위한 URI 생성
        //여기서 사용되는 Uri는 실제로는 중요하지 않습니다. 이는 PackageStore 내부의 패키지 Uri에 대한 자리 표시자 역할을 합니다.
        var inMemoryPackageName = $"memorystream://{Guid.NewGuid()}.xps";
        var packageUri = new Uri(inMemoryPackageName);

        //패키지를 PackageStore에 추가
        PackageStore.AddPackage(packageUri, package);

        var xpsDoc = new XpsDocument(package, CompressionOption.Maximum, inMemoryPackageName);
        var fixedDocumentSequence = xpsDoc.GetFixedDocumentSequence();

        var printDialog = new PrintDialog();
        if (printDialog.ShowDialog() == true)
        {
            if (fixedDocumentSequence != null)
                printDialog.PrintDocument(fixedDocumentSequence.DocumentPaginator, "고정된 문서");
            else
                throw new NullReferenceException();
        }
        PackageStore.RemovePackage(packageUri);
        xpsDoc.Close();

    }

이 경우에는 다음과 같은 단계를 따릅니다:

  1. OpenFileDialog를 사용하여 PDF 파일 열기
  2. PDF를 XPS로 변환하고 MemoryStream 객체에 저장
  3. MemoryStream 객체를 Xps 패키지와 연결
  4. 패키지를 패키지 저장소에 추가
  5. 패키지를 기반으로 XpsDocument 생성
  6. FixedDocumentSequence의 인스턴스 가져오기
  7. PrintDialog를 사용하여 이 시퀀스를 프린터로 보내기

문서 보기 및 인쇄

많은 경우 사용자는 인쇄하기 전에 문서를 보고 싶어 합니다. 뷰를 구현하기 위해 DocViewer 클래스를 사용할 수 있습니다. 이 접근 방식을 구현하기 위한 대부분의 단계는 이전 예제와 유사합니다.

private void OpenFile_OnClick(object sender, RoutedEventArgs e)
{
    var openFileDialog = new OpenFileDialog
    {
        Filter = "PDF 문서|*.pdf"
    };

    if (openFileDialog.ShowDialog() == true)
    {
        var document = new Document(openFileDialog.FileName);
        var memoryStream = new MemoryStream();
        document.Save(memoryStream, SaveFormat.Xps);

        var package = Package.Open(memoryStream);

        var inMemoryPackageName = $"memorystream://{Guid.NewGuid()}.xps";
        var packageUri = new Uri(inMemoryPackageName);

        //패키지를 패키지 저장소에 추가
        PackageStore.AddPackage(packageUri, package);

        var xpsDoc = new XpsDocument(package, CompressionOption.Maximum, inMemoryPackageName);
        DocViewer.Document = xpsDoc.GetFixedDocumentSequence();
        xpsDoc.Close();
    };
}