PDF에서 PostScript로 변환
다음 코드 조각은 Aspose.PDF.Drawing 라이브러리와 함께 작동합니다.
C#에서 PDF를 Postscript로 변환
PdfViewer 클래스는 PDF 문서를 인쇄하는 기능을 제공하며 이 클래스를 사용하여 PDF 파일을 PostScript 형식으로 변환할 수 있습니다. PDF 파일을 PostScript로 변환하려면 먼저 PS 프린터를 설치하고 PdfViewer를 사용하여 파일로 인쇄하십시오. 하와이 대학의 지침에 따라 PS 프린터를 설치하는 방법을 따를 수 있습니다. 다음 코드 조각은 PDF를 PostScript 형식으로 인쇄하고 변환하는 방법을 보여줍니다.
public static void PrintToPostscriptFile()
{
// 문서 디렉토리의 경로입니다.
// string dataDir = RunExamples.GetDataDir_AsposePdfFacades_Printing();
Aspose.Pdf.Facades.PdfViewer viewer = new Aspose.Pdf.Facades.PdfViewer();
viewer.BindPdf(_dataDir + "input.pdf");
// PrinterSettings 및 PageSettings 설정
System.Drawing.Printing.PrinterSettings printerSettings = new System.Drawing.Printing.PrinterSettings();
printerSettings.Copies = 1;
// PS 프린터 설정, Windows에 사전 설치된 프린터 드라이버 목록에서 이 드라이버를 찾을 수 있습니다
printerSettings.PrinterName = "HP LaserJet 2300 Series PS";
// 출력 파일 이름 및 PrintToFile 속성 설정
printerSettings.PrintFileName = _dataDir + "PdfToPostScript_out.ps";
printerSettings.PrintToFile = true;
// 인쇄 페이지 대화 상자 비활성화
viewer.PrintPageDialog = false;
// 메소드에 프린터 설정 객체 전달
viewer.PrintDocumentWithSettings(printerSettings);
viewer.Close();
}
인쇄 작업 상태 확인
PDF 파일은 물리적 프린터뿐만 아니라 Microsoft XPS Document Writer에도 인쇄 대화 상자를 표시하지 않고 PdfViewer 클래스를 사용하여 인쇄할 수 있습니다. 큰 PDF 파일을 인쇄할 때 프로세스가 오래 걸릴 수 있으므로 사용자는 인쇄 프로세스가 완료되었는지 또는 문제가 발생했는지 확실하지 않을 수 있습니다. 인쇄 작업의 상태를 확인하려면 PrintStatus 속성을 사용하십시오. 다음 코드 조각은 PDF 파일을 XPS 파일로 인쇄하고 인쇄 상태를 얻는 방법을 보여줍니다.
public static void CheckingPrintJobStatus()
{
// 완전한 예제와 데이터 파일은 https://github.com/aspose-pdf/Aspose.Pdf-for-.NET에서 확인하세요.
// 문서 디렉토리 경로입니다.
// string dataDir = RunExamples.GetDataDir_AsposePdfFacades_Printing();
// PdfViewer 객체 인스턴스화
PdfViewer viewer = new PdfViewer();
// 소스 PDF 파일 바인딩
viewer.BindPdf(_dataDir + "input.pdf");
viewer.AutoResize = true;
// 인쇄 대화 상자 숨기기
viewer.PrintPageDialog = false;
// 프린터 설정 객체 생성
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// 프린터 이름 지정
ps.PrinterName = "Microsoft XPS Document Writer";
// 결과 출력물 이름
ps.PrintFileName = "ResultantPrintout.xps";
// 파일로 출력 인쇄
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
// 인쇄물의 페이지 크기 지정
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// 위에서 지정한 설정으로 문서 인쇄
viewer.PrintDocumentWithSettings(pgs, ps);
// 인쇄 상태 확인
if (viewer.PrintStatus != null)
{
// 예외가 발생했습니다
if (viewer.PrintStatus is Exception ex)
{
// 예외 메시지 가져오기
Console.WriteLine(ex.Message);
}
}
else
{
// 오류가 없습니다. 인쇄 작업이 성공적으로 완료되었습니다
Console.WriteLine("printing completed without any issue..");
}
}
인쇄 작업 소유자 이름 가져오기/설정하기
최근에 웹 페이지에서 인쇄 버튼을 누른 실제 사용자인 인쇄 작업 소유자 이름을 가져오고 설정해야 하는 요구사항을 받았습니다. 이 정보는 PDF 파일을 인쇄할 때 필요합니다. 이 요구사항을 충족하기 위해 PrinterJobName이라는 속성을 사용할 수 있습니다:
// 완전한 예제와 데이터 파일은 https://github.com/aspose-pdf/Aspose.Pdf-for-.NET 에서 확인할 수 있습니다.
// 문서 디렉토리 경로.
string dataDir = RunExamples.GetDataDir_AsposePdfFacades_Printing();
PdfViewer viewer = new PdfViewer();
// 소스 PDF 파일 바인딩
viewer.BindPdf(dataDir + "input.pdf");
// 인쇄 작업의 이름 지정
viewer.PrinterJobName = GetCurrentUserCredentials();
// 완전한 예제와 데이터 파일은 https://github.com/aspose-pdf/Aspose.Pdf-for-.NET 에서 확인할 수 있습니다.
private static string GetCurrentUserCredentials()
{
// 구현은 실행 중인 애플리케이션 유형(ASP.NET, Windows Forms 등)에 따라 다릅니다.
string userCredentials = string.Empty;
return userCredentials;
}
위장 사용하기
프린트 작업 소유자 이름을 가져오는 또 다른 방법은 위장(다른 사용자 컨텍스트에서 인쇄 루틴 실행)을 사용하거나 사용자가 SetJob 루틴을 사용하여 소유자 이름을 직접 변경하는 것입니다.
Aspose.PDF 인쇄 API를 사용하여 보안 고려 사항으로 소유자 값을 설정할 수 없다는 점에 유의하십시오. PrinterJobName 속성은 스풀러 인쇄 응용 프로그램의 문서 이름 열 값 설정에 사용될 수 있습니다. 위에 공유된 코드 스니펫은 사용자가 문서 이름 열에 사용자 이름을 어떻게 포함시킬 수 있는지를 보여줍니다(예를 들어 UserName\documentName 구문 사용). 그러나 소유자 열의 설정은 사용자에 의해 다음 방법으로 직접 구현될 수 있습니다:
- 위장. 소유자 열 값은 인쇄 코드를 실행하는 사용자의 값을 포함하므로 다른 사용자 컨텍스트 내에서 Aspose.PDF 인쇄 API를 호출할 방법이 있습니다. 예를 들어 여기에 설명된 솔루션을 살펴보십시오. 이 클래스를 사용하여 사용자는 목표를 달성할 수 있습니다:
// 전체 예제와 데이터 파일은 https://github.com/aspose-pdf/Aspose.Pdf-for-.NET 에서 확인하십시오.
// 문서 디렉토리로의 경로.
string dataDir = RunExamples.GetDataDir_AsposePdfFacades_Printing();
PdfViewer viewer = new PdfViewer();
viewer.BindPdf( dataDir + "input.pdf");
viewer.PrintPageDialog = false;
// 인쇄 시 페이지 번호 대화 상자를 생성하지 않습니다
using (new Impersonator("OwnerUserName", "SomeDomain", "OwnerUserNamePassword"))
{
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
ps.PrinterName = "Microsoft XPS Document Writer";
viewer.PrintDocumentWithSettings(ps); // OwnerUserName은 스풀러 앱의 소유자 열의 값입니다
viewer.Close();
}
- Spooler API 및 SetJob 루틴 사용하기
다음 코드 스니펫은 PDF 파일의 일부 페이지를 Simplex 모드와 Duplex 모드로 인쇄하는 방법을 보여줍니다.
struct PrintingJobSettings
{
public int ToPage { get; set; }
public int FromPage { get; set; }
public string OutputFile { get; set; }
public System.Drawing.Printing.Duplex Mode { get; set; }
}
// 전체 예제와 데이터 파일은 다음에서 확인하십시오: https://github.com/aspose-pdf/Aspose.Pdf-for-.NET
// 문서 디렉토리 경로
string dataDir = RunExamples.GetDataDir_AsposePdfFacades_Printing();
int printingJobIndex = 0;
string inPdf = dataDir + "input.pdf";
string output = dataDir;
IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();
PrintingJobSettings printingJob1 = new PrintingJobSettings();
printingJob1.FromPage = 1;
printingJob1.ToPage = 3;
printingJob1.OutputFile = output + "35925_1_3.xps";
printingJob1.Mode = Duplex.Default;
printingJobs.Add(printingJob1);
PrintingJobSettings printingJob2 = new PrintingJobSettings();
printingJob2.FromPage = 4;
printingJob2.ToPage = 6;
printingJob2.OutputFile = output + "35925_4_6.xps";
printingJob2.Mode = Duplex.Simplex;
printingJobs.Add(printingJob2);
PrintingJobSettings printingJob3 = new PrintingJobSettings();
printingJob3.FromPage = 7;
printingJob3.ToPage = 7;
printingJob3.OutputFile = output + "35925_7.xps";
printingJob3.Mode = Duplex.Default;
printingJobs.Add(printingJob3);
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(inPdf);
viewer.AutoResize = true;
viewer.AutoRotate = true;
viewer.PrintPageDialog = false;
PrinterSettings ps = new PrinterSettings();
PageSettings pgs = new 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 = PrintRange.SomePages;
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
pgs.Margins = new System.Drawing.Printing.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);