سؤال

نحن نبحث في الطباعة الصامتة لمستندات PDF من داخل جافا. سيتم استدعاء الطباعة من سطح المكتب وليس من خلال متصفح لذلك لا يمكننا استخدام JavaScript. عارض PDF هو حل تشغيلي ، لكن جودة التقديم غير مقبولة. لا يبدو أن itext قابلة للتوصيل مع خدمة طباعة Java. هناك بعض مكتبات Java التجارية ، JPDFPRINT من QOPPA و JPERAL و ICEPDF التي لم نجربها بعد.

هل لدى أي شخص أي خبرة في طباعة PDF صامتة من جافا؟

هل كانت مفيدة؟

المحلول

Apache pdfbox. إنه حاليًا في الحضانة ، لكن وظيفة طباعة PDF كانت موجودة قبل ذلك. داخليًا ، يستخدم خدمات طباعة Java لإنشاء وظيفة طباعة ، كما يدعم أيضًا الطباعة الصامتة.

لاحظ أنه يتطلب fontbox أيضًا ، وقد تضمن الإصدار الحالي (الإصدار 0.8.0 القادم) عوائق رشيقة للوثائق ذات الخطوط 0. تتم طباعة خطوط النوع 1 بشكل صحيح ؛ ومع ذلك ، في 0.7.3 ، ستؤدي محاولات طباعة المستندات بخطوط النوع 0 إلى إلقاء استثناء.

نصائح أخرى

ربما أنا أسيء فهم ، ولكن لماذا لا تستخدم فقط واجهة برمجة تطبيقات خدمة الطباعة مباشرة؟ ما يلي يعمل بالنسبة لي (يفترض أن لديك وثيقة 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 مجانًا للمشاريع المفتوحة المصدر. لديها روابط لجافا.

هناك مثال باستخدام Jpedal في http://www.jpedal.org/support_egsp.php

ستحتاج إلى الإصدار التجاري من ICEPDF إذا كنت تريد دعم الخط الكامل.

لديّ خبرة في صنع Acrobat (القارئ أو الكامل) القيام بالطباعة ، لكنها صامتة (إنها غير مراقبة ، على الرغم من ذلك - يعتمد فقط على مدى "الصمت" المتطلبات الصامتة). إذا كان هناك مصلحة ، فيمكنني تصوير الرمز الأصلي الذي يجعل مكالمات DDE المطلوبة.

يهدف Itext لإنشاء ملفات PDF (لكل منشور رأيته من المؤلف) ، وبالتالي ربما ليس ما تريده.

لقد استخدمت JPDFPRINT من QOPPA بنجاح كبير لهذا الغرض بالضبط ، لكنها ليست رخيصة. إذا كنت تستطيع تحمله ، فهو الحل الأقوى الذي وجدته حتى الآن. لقد تأثرت أيضًا بمستوى الدعم ؛ حتى أنها أنشأت بعض رمز العينة المخصص لي.

لقد جربت PDFBox ، لكنني وجدت أنه لا يدعم صفحة "الانكماش إلى المنطقة القابلة للطباعة" التي تحصل عليها مع Acrobat. لن يهتم الجميع بهذه الميزة ، لكنه ضروري بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top