Java - Drukowanie PDF - błąd odczytu pliku PDF

0

Czemu nie mogę otworzyć pdf stworzonego przez ten kod? Adobe Reader wyświetla komunikat: "adobe reader nie może otworzyć pliku ponieważ nie jest to obsługiwany typ pliku lub jest uszkodzony". Chciałbym przetestować drukowanie używając Microsofr PDF Printer. Program zwraca 0. Nie chcę używać funkcji pytających użytkownika o parametry wydruku, wszystko ma być w kodzie. Czemu nie mogę otworzyć pliku? Jest źle tworzony? Czy niemożliwość odczytu uniemożliwi drukowanie pliku?

import java.awt.*;
import java.awt.event.*;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.*;
import javax.swing.*;
import java.awt.print.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class Main implements Printable, ActionListener {

    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {

        if (page > 0) {
            return NO_SUCH_PAGE;
        }

        Graphics2D g2d = (Graphics2D)g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());

        g.drawString("Hello world!", 100, 100);

        return PAGE_EXISTS;
    }

    public void actionPerformed(ActionEvent e) {

        FileInputStream textStream = null;
        File file = new File("C:\\Users\\admin\\Desktop\\kio.txt");

        try
        {
            textStream = new FileInputStream(file);
            String encoding = "UTF-8";
            BufferedReader br = new BufferedReader( new InputStreamReader(textStream, encoding ));
            StringBuilder sb = new StringBuilder();
            String line;

            while(( line = br.readLine()) != null )
            {
                sb.append( line );
                sb.append( '\n' );
            }
            System.out.println(sb.toString());

        }
        catch (Exception df)
        {
            System.out.println(df.getMessage());
        }

        DocFlavor myFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
        Doc myDoc = new SimpleDoc(textStream, myFormat, null);

        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(new Copies(1));
        aset.add(Sides.ONE_SIDED);
        aset.add(MediaSizeName.ISO_A4);
        aset.add(new PrinterResolution(300, 300, PrinterResolution.DPI));
        aset.add(new MediaPrintableArea(2, 2, 210 - 4, 297 - 4, MediaPrintableArea.MM));


        PrintService printService = PrintServiceLookup.lookupDefaultPrintService();

        System.out.println("Printing to default printer: " + printService.getName());

        DocPrintJob job = printService.createPrintJob();

        try
        {
            job.print(myDoc, aset);
            System.out.println("Druk");
        }
        catch (PrintException ex)
        {
            System.out.println(ex.getMessage());
        }
    }


    public static void main(String[] args) {
        UIManager.put("swing.boldMetal", Boolean.FALSE);
        JFrame f = new JFrame("Hello World Printer");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        JButton printButton = new JButton("Print Hello World");
        printButton.addActionListener(new Main());
        f.add("Center", printButton);
        f.pack();
        f.setVisible(true);
    }
}
1

Po pierwsze nie możesz tykać tego strumienia i czytać z niego, bo go opróżniasz. Tylko go utwórz i od razu przekaż do dokumentu.

for(Object flav: printService.getSupportedDocFlavors())
    System.out.println("F " + flav);

Zobacz, jakie flavory obsługuje Twoja drukarka. U mnie zadziałało JPG. Flavor JPG zasilony plikiem JPG - i wydrukował.

Jak podajesz plik tekstowy, a drukarka spodziewa się danych w jakimś swoim formacie, to kończy się to mrugnięciem zadania na kolejce wydruku. Bez żadnych spodziewanych efektów, bez błędu. Taki urok, wynika to pewnie z niedoskonałości styku java-windows.

1 użytkowników online, w tym zalogowanych: 0, gości: 1