PDF를 PostScript로 변환
다음 코드 스니펫은 Aspose.PDF.Drawing 라이브러리와 함께 작동합니다.
C#에서 PDF를 PostScript로 변환하기
PdfViewer 클래스는 PDF 문서를 인쇄할 수 있는 기능을 제공하며, 이 클래스를 사용하여 PDF 파일을 PostScript 형식으로 변환할 수도 있습니다. PDF 파일을 PostScript로 변환하려면 먼저 PS 프린터를 설치하고 PdfViewer의 도움으로 파일로 인쇄하면 됩니다. PS 프린터를 설치하려면 프린터 공급업체에서 제공하는 지침을 참조하세요. 다음 코드 스니펫은 PDF를 PostScript 형식으로 인쇄하고 변환하는 방법을 보여줍니다.
인쇄 작업 상태 확인
PDF 파일은 물리적 프린터뿐만 아니라 Microsoft XPS Document Writer에도 인쇄할 수 있으며, PdfViewer 클래스를 사용하여 인쇄 대화 상자를 표시하지 않고도 가능합니다. 큰 PDF 파일을 인쇄할 때는 프로세스가 오랜 시간이 걸릴 수 있으므로 사용자는 인쇄 프로세스가 완료되었는지 또는 문제가 발생했는지 확신하지 못할 수 있습니다. 인쇄 작업의 상태를 확인하려면 PrintStatus 속성을 사용하세요. 다음 코드 스니펫은 PDF 파일을 XPS 파일로 인쇄하고 인쇄 상태를 가져오는 방법을 보여줍니다.
인쇄 작업 소유자 이름 가져오기/설정하기
때때로 인쇄 작업 소유자 이름(즉, 웹 페이지에서 인쇄 버튼을 누른 실제 사용자)을 가져오거나 설정해야 할 필요가 있습니다. 이 정보는 PDF 파일을 인쇄할 때 필요합니다. 이 요구 사항을 충족하기 위해 PrinterJobName 속성이 사용됩니다.
임시 사용자 사용하기
인쇄 작업 소유자 이름을 가져오는 또 다른 방법은 임시 사용자(다른 사용자 컨텍스트에서 인쇄 루틴 실행)를 사용하는 것이며, 사용자는 SetJob 루틴을 사용하여 소유자 이름을 직접 변경할 수 있습니다.
보안 고려 사항으로 인해 Aspose.PDF 인쇄 API를 사용하여 소유자 값을 설정할 수 있는 가능성은 없습니다. PrinterJobName 속성은 스풀러 인쇄 애플리케이션에서 문서 이름 열 값을 설정하는 데 사용될 수 있습니다. 위에서 공유한 코드 스니펫은 사용자가 문서 이름 열에 사용자 이름을 추가하는 방법을 보여줍니다(예: UserName\documentName 구문 사용). 그러나 소유자 열의 설정은 사용자가 다음과 같은 방법으로 직접 구현할 수 있습니다:
임시 사용자. 소유자 열 값은 인쇄 코드를 실행하는 사용자의 값을 포함하므로, 다른 사용자 컨텍스트 내에서 Aspose.PDF 인쇄 API를 호출할 수 있는 방법이 있습니다. 예를 들어, 여기에서 설명된 솔루션을 참조하세요. 이 임시 사용자 클래스 를 사용하면 사용자가 목표를 달성할 수 있습니다:
스풀러 API 및 SetJob 루틴 사용하기
다음 코드 스니펫은 PDF 파일의 일부 페이지를 단면 인쇄하고 일부 페이지를 양면 인쇄하는 방법을 보여줍니다.
.NET Core 3.1
Copy
struct PrintingJobSettings
{
public int ToPage { get ; set ; }
public int FromPage { get ; set ; }
public string OutputFile { get ; set ; }
public Aspose . Pdf . Printing . Duplex Mode { get ; set ; }
}
private static void PrintUsingSpoolerApi ( )
{
var dataDir = RunExamples . GetDataDir_AsposePdfFacades_Printing ();
int printingJobIndex = 0 ;
string outputDir = dataDir ;
var printingJobs = new List < PrintingJobSettings >();
var printingJob1 = new PrintingJobSettings ();
printingJob1 . FromPage = 1 ;
printingJob1 . ToPage = 3 ;
printingJob1 . OutputFile = outputDir + "PrintUsingSpoolerApi_p1-3_out.xps" ;
printingJob1 . Mode = Aspose . Pdf . Printing . Duplex . Default ;
printingJobs . Add ( printingJob1 );
PrintingJobSettings printingJob2 = new PrintingJobSettings ();
printingJob2 . FromPage = 4 ;
printingJob2 . ToPage = 6 ;
printingJob2 . OutputFile = outputDir + "PrintUsingSpoolerApi_p4-6_out.xps" ;
printingJob2 . Mode = Aspose . Pdf . Printing . Duplex . Simplex ;
printingJobs . Add ( printingJob2 );
PrintingJobSettings printingJob3 = new PrintingJobSettings ();
printingJob3 . FromPage = 7 ;
printingJob3 . ToPage = 7 ;
printingJob3 . OutputFile = outputDir + "PrintUsingSpoolerApi_p7_out.xps" ;
printingJob3 . Mode = Aspose . Pdf . Printing . Duplex . Default ;
printingJobs . Add ( printingJob3 );
using ( var viewer = new Aspose . Pdf . Facades . PdfViewer ())
{
viewer . BindPdf ( dataDir + "Print-PageRange.pdf" );
viewer . AutoResize = true ;
viewer . AutoRotate = true ;
viewer . PrintPageDialog = false ;
var ps = new Aspose . Pdf . Printing . PrinterSettings ();
var pgs = new Aspose . Pdf . Printing . PageSettings ();
ps . PrinterName = "Microsoft XPS Document Writer" ;
ps . PrintFileName = Path . GetFullPath ( printingJobs [ printingJobIndex ]. OutputFile );
ps . PrintToFile = true ;
ps . FromPage = printingJobs [ printingJobIndex ]. FromPage ;
ps . ToPage = printingJobs [ printingJobIndex ]. ToPage ;
ps . Duplex = printingJobs [ printingJobIndex ]. Mode ;
ps . PrintRange = Aspose . Pdf . Printing . PrintRange . SomePages ;
pgs . PaperSize = Aspose . Pdf . Printing . PaperSizes . A4 ;
ps . DefaultPageSettings . PaperSize = pgs . PaperSize ;
pgs . Margins = new Aspose . Pdf . Devices . Margins ( 0 , 0 , 0 , 0 );
viewer . EndPrint += ( sender , args ) =>
{
if (++ printingJobIndex < printingJobs . Count )
{
ps . PrintFileName = Path . GetFullPath ( printingJobs [ printingJobIndex ]. OutputFile );
ps . FromPage = printingJobs [ printingJobIndex ]. FromPage ;
ps . ToPage = printingJobs [ printingJobIndex ]. ToPage ;
ps . Duplex = printingJobs [ printingJobIndex ]. Mode ;
viewer . PrintDocumentWithSettings ( pgs , ps );
}
};
viewer . PrintDocumentWithSettings ( pgs , ps );
}
}
.NET 8
Copy
struct PrintingJobSettings
{
public int ToPage { get ; set ; }
public int FromPage { get ; set ; }
public string OutputFile { get ; set ; }
public Aspose . Pdf . Printing . Duplex Mode { get ; set ; }
}
private static void PrintUsingSpoolerApi ( )
{
var dataDir = RunExamples . GetDataDir_AsposePdfFacades_Printing ();
int printingJobIndex = 0 ;
var printingJobs = new List < PrintingJobSettings >();
var printingJob1 = new PrintingJobSettings ();
printingJob1 . FromPage = 1 ;
printingJob1 . ToPage = 3 ;
printingJob1 . OutputFile = dataDir + "PrintUsingSpoolerApi_p1-3_out.xps" ;
printingJob1 . Mode = Aspose . Pdf . Printing . Duplex . Default ;
printingJobs . Add ( printingJob1 );
PrintingJobSettings printingJob2 = new PrintingJobSettings ();
printingJob2 . FromPage = 4 ;
printingJob2 . ToPage = 6 ;
printingJob2 . OutputFile = dataDir + "PrintUsingSpoolerApi_p4-6_out.xps" ;
printingJob2 . Mode = Aspose . Pdf . Printing . Duplex . Simplex ;
printingJobs . Add ( printingJob2 );
PrintingJobSettings printingJob3 = new PrintingJobSettings ();
printingJob3 . FromPage = 7 ;
printingJob3 . ToPage = 7 ;
printingJob3 . OutputFile = dataDir + "PrintUsingSpoolerApi_p7_out.xps" ;
printingJob3 . Mode = Aspose . Pdf . Printing . Duplex . Default ;
printingJobs . Add ( printingJob3 );
using var viewer = new Aspose . Pdf . Facades . PdfViewer ();
viewer . BindPdf ( dataDir + "Print-PageRange.pdf" );
viewer . AutoResize = true ;
viewer . AutoRotate = true ;
viewer . PrintPageDialog = false ;
var ps = new Aspose . Pdf . Printing . PrinterSettings ();
var pgs = new Aspose . Pdf . Printing . PageSettings ();
ps . PrinterName = "Microsoft XPS Document Writer" ;
ps . PrintFileName = Path . GetFullPath ( printingJobs [ printingJobIndex ]. OutputFile );
ps . PrintToFile = true ;
ps . FromPage = printingJobs [ printingJobIndex ]. FromPage ;
ps . ToPage = printingJobs [ printingJobIndex ]. ToPage ;
ps . Duplex = printingJobs [ printingJobIndex ]. Mode ;
ps . PrintRange = Aspose . Pdf . Printing . PrintRange . SomePages ;
pgs . PaperSize = Aspose . Pdf . Printing . PaperSizes . A4 ;
ps . DefaultPageSettings . PaperSize = pgs . PaperSize ;
pgs . Margins = new Aspose . Pdf . Devices . Margins ( 0 , 0 , 0 , 0 );
viewer . EndPrint += ( sender , args ) =>
{
if (++ printingJobIndex < printingJobs . Count )
{
ps . PrintFileName = Path . GetFullPath ( printingJobs [ printingJobIndex ]. OutputFile );
ps . FromPage = printingJobs [ printingJobIndex ]. FromPage ;
ps . ToPage = printingJobs [ printingJobIndex ]. ToPage ;
ps . Duplex = printingJobs [ printingJobIndex ]. Mode ;
viewer . PrintDocumentWithSettings ( pgs , ps );
}
};
viewer . PrintDocumentWithSettings ( pgs , ps );
}