Java 打印文件时获取原始文件流(pdf)

Java 打印文件时获取原始文件流(pdf),java,jasper-reports,Java,Jasper Reports,我正在尝试打印JasperExportManager.ExportReportToDfstream jasperPrint、outputStream的结果,并在打印结果纸上获得原始流。我不知道我的java源代码是否有问题。如何打印pdf文件创建打印作业 package testprint; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.

我正在尝试打印JasperExportManager.ExportReportToDfstream jasperPrint、outputStream的结果,并在打印结果纸上获得原始流。我不知道我的java源代码是否有问题。如何打印pdf文件创建打印作业

package testprint;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.MediaSize;
import javax.print.attribute.standard.MediaSizeName;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

public class Printing {

    public static void main(String[] args) {
        Printing printing = new Printing();
        Map<String, Object> params = new HashMap();
        params.put("TEST_PARAM", "This is a test string");

        printing.print(params, 1);
    }

    public void print(Map<String, Object> params, int copies) {
        try {
            InputStream jasper = getClass().getResourceAsStream("/jasper/TestReport.jasper");
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasper, params, new JREmptyDataSource());

            File tempFile = File.createTempFile("TestReport", ".tmp");
            OutputStream out = new FileOutputStream(tempFile);
            JasperExportManager.exportReportToPdfStream(jasperPrint, out); 

            PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
            DocFlavor docflavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

            PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
            aset.add(new Copies(copies));
            MediaSizeName mediaSizeName = MediaSize.findMedia((float) 8.5, (float) 2.75, MediaPrintableArea.INCH);
            aset.add(mediaSizeName);
            String jobName = "Test Report";
            aset.add(new JobName(jobName, Locale.US));

            Doc doc = new SimpleDoc(new FileInputStream(tempFile), docflavor, null);

            DocPrintJob printJob = printService.createPrintJob();
            printJob.print(doc, aset);

        } catch (FileNotFoundException ex) {
            System.out.println(ex.getMessage());
        } catch (JRException | IOException | PrintException ex) {
            System.out.println(ex.getMessage());
        }
    }
}
并在打印结果上得到如下结果

%PDF-1.4
%âãÏÓ
3 0 obj
<</Length 138/Filter/FlateDecode>>stream
xœ+är
á26S043RIár
á
ä2Rð‰* !ˆ4´´PÉåÒw3T04PIãÒÐÉ©E(1PHÎEÖdhj¢`hd¡2Y§X¾(KÃ#5''dŽB:³¢ct
Ø-¸m12´$`KHFf±%*”¤—(—eæ¥e+ —;z
endstream
endobj
1 0 obj
<</Group<</Type/Group/CS/DeviceRGB/S/Transparency>>/Parent 4 0 R/Contents 3 0 R/Type/Page/Resources<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]/ColorSpace<</CS/DeviceRGB>>/Font<</F1 2 0 R>>>>/MediaBox[0 0 612 198]>>
endobj
5 0 obj
[1 0 R/XYZ 0 208 0]
endobj
2 0 obj
<</BaseFont/Helvetica/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>
endobj
4 0 obj
<</ITXT(2.1.7)/Type/Pages/Count 1/Kids[1 0 R]>>
endobj
6 0 obj
<</Names[(JR_PAGE_ANCHOR_0_1) 5 0 R]>>
endobj
7 0 obj
<</Dests 6 0 R>>
endobj
8 0 obj
<</Names 7 0 R/Type/Catalog/ViewerPreferences<</PrintScaling/AppDefault>>/Pages 4 0 R>>
endobj
9 0 obj
<</Creator(JasperReports \(TestReport\))/Producer(iText 2.1.7 by 1T3XT)/ModDate(D:20140326210633+07'00')/CreationDate(D:20140326210633+07'00')>>
endobj
xref
0 10
0000000000 65535 f 
0000000220 00000 n 
0000000489 00000 n 
0000000015 00000 n 
0000000577 00000 n 
0000000454 00000 n 
0000000640 00000 n 
0000000694 00000 n 
0000000726 00000 n 
0000000829 00000 n 
trailer
<</Root 8 0 R/ID [<4fbdbc1295f7e9f178f2c58efb84a5f8><e0046353cbc6a6edb104ec2aee0a5fb1>]/Info 9 0 R/Size 10>>
startxref
989
%%EOF

我不确定这是否会有帮助,但既然您知道您将打印PDF,为什么不将味道声明为DocFlavor.INPUT\u STREAM.PDF而不是DocFlavor.INPUT\u STREAM.autosense谢谢@CeilingGecko。我明天会测试它。我不在办公室now@CeilingGecko当前位置我得到了这个例外,我知道现在已经晚了4年多。。。但您将文件另存为TestReport.tmp。也许可以试试TestReport.pdf?