문제

우리는 Java 내에서 PDF 문서의 조용한 인쇄를 조사하고 있습니다. 인쇄는 브라우저를 통해가 아니라 바탕 화면에서 호출되므로 JavaScript를 사용할 수 없습니다. PDF 렌더러는 작동 솔루션이지만 렌더링 품질은 허용되지 않습니다. itext는 Java 인쇄 서비스와 함께 묶을 수없는 것 같습니다. Qoppa, Jpedal 및 ICEPDF의 JPDFPrint, 우리가 아직 시도하지 않은 일부 상용 Java 라이브러리가 있습니다.

Java의 PDF Silent Printing에 대한 경험이 있습니까?

도움이 되었습니까?

해결책

아파치 pdfbox. 현재 인큐베이션 중이지만 PDF 인쇄 기능은 그 이전에있었습니다. 내부적으로 Java 인쇄 서비스를 사용하여 인쇄 작업을 작성하며 지원합니다. 조용한 인쇄.

Fontbox도 필요하며 현재 (다가오는 0.8.0 릴리스)에는 유형 0 글꼴이있는 문서에 대한 우아한 폴백이 포함되어 있습니다. 유형 1 글꼴은 올바르게 인쇄됩니다. 그러나 0.7.3에서 유형 0 글꼴로 문서를 인쇄하려는 시도는 예외가 발생합니다.

다른 팁

어쩌면 나는 오해를하고 있지만 인쇄 서비스 API를 직접 사용하지 않는 이유는 무엇입니까? 다음은 저를 위해 작동합니다 (PDF 문서를 바이트 배열로 가정) :

DocFlavor flavor = DocFlavor.BYTE_ARRAY.PDF;
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
if (services.length > 0)
{
    DocPrintJob printJob = services[0].createPrintJob();
    Doc document = new SimpleDoc(pdfBytes, flavor, null)
    printJob.print(document, null);
}
else
{
    System.out.println("No PDF printer available.");
}

이것은 나를 위해 작동합니다 :

public void print() {
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
    FileInputStream psStream = null;  
    try {  
        psStream = new FileInputStream("c:\\test.pdf");  
        } catch (FileNotFoundException ffne) {  
          ffne.printStackTrace();  
        }  
    if (psStream == null) {  
        return;  
    }       
    if (services.length > 0)
    {
        PrintService myService = null;
        for(PrintService service : services) {
            System.out.println(service.getName());
            if(service.getName().contains("my printer")) {
                myService = service;
                break;
            }
        }
        DocPrintJob printJob = myService.createPrintJob();
        Doc document = new SimpleDoc(psStream, flavor, null);
        try {
            printJob.print(document, null);
        } catch (PrintException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    else
    {
        System.out.println("No PDF printer available.");
    }       
}

www.pdflib.com을 살펴보십시오. 그것의 comercial이지만 pdflib lite는 오픈 소스 프로젝트를 위해 무료로 제공됩니다. Java에 대한 바인딩이 있습니다.

jpedal at을 사용하는 예가 있습니다 http://www.jpedal.org/support_egsp.php

전체 글꼴 지원을 원한다면 ICEPDF의 상용 버전이 필요합니다.

나는 Acrobat (Reader 또는 Full)가 인쇄를하는 경험이 있지만, 그것은 침묵하는 것 외에는 아무것도 아닙니다 (그러나 무례합니다. 단지 침묵의 요구 사항이 얼마나 '침묵하는'이라는 것에 달려 있습니다)). 관심이 있다면 필요한 DDE 호출을하는 기본 코드를 촬영할 수 있습니다.

ITEXT는 PDF 파일을 만들기위한 것이므로 (저자로부터 본 게시물에 따라) 아마도 원하는 것이 아닐 것입니다.

이 목적을 위해 Qoppa의 JPDFPrint를 매우 성공적으로 사용했지만 저렴하지는 않습니다. 당신이 그것을 감당할 수 있다면, 그것은 내가 지금까지 찾은 가장 강력한 솔루션입니다. 나는 또한 지원 수준에 깊은 인상을 받았습니다. 그들은 심지어 나를 위해 몇 가지 사용자 정의 샘플 코드를 생성했습니다.

PDFbox를 시도했지만 Acrobat로 얻는 "인쇄 가능한 영역에 대한 수축"페이지 스케일링을 지원하지 않는다는 것을 알았습니다. 모든 사람 이이 기능을 신경 쓰지는 않지만 저에게는 필수적입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top