打印 ByteArrayOutputStream 对象
Printing ByteArrayOutputStream object
我有一个使用 iText 库生成的 PDF 文档,然后我使用 ByteArrayOutputStream 将文档保存在内存中以打印它,但它没有打印任何内容。关于为什么不打印的任何想法?您可以在下面找到代码并提前致谢。
ByteArrayOutputStream byteArr = new ByteArrayOutputStream();
Document document = new Document();
PdfWriter.getInstance(document, byteArr);
document.open();
/*
* Adding data and tables to the document
*/
document.close();
DocFlavor docType = DocFlavor.BYTE_ARRAY.AUTOSENSE;
byte[] byteStream = byteArr.toByteArray();// fetch content in byte array;
// byteArr is the ByteArrayOutputStream object
// Tried using InputStream but did not work as well.
Doc documentToBePrinted = new SimpleDoc(byteStream, docType, null);
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
PrintService services = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob job = services.createPrintJob();
try {
job.print(documentToBePrinted, aset);
System.out.println("Donee");
}
catch (Exception pe)
{
pe.printStackTrace();
}
byteArr = null;
}
如果无法 运行 您的代码,这不是一个容易回答的问题。
可能的问题是您没有关闭 PdfDocument
class。
结果,底层资源没有被释放,字节也没有被刷新。
结果生成了一个无效的(有时甚至是空的)PDF文档,打印机当然不会(或不能)打印。
如果您可以存储 PDF,并且它在查看器中正确显示,那么您很可能在应用程序的打印部分做错了。
可能您使用的打印机不直接支持PDF。尝试使用 PDFBox 打印文档。我做了一个小的 maven 项目来测试它,它对我有用:
Main.java:
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;
import javax.print.*;
import java.awt.print.PrinterJob;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
class Main {
public static void main(String[] args) throws DocumentException, IOException {
ByteArrayOutputStream byteArr = new ByteArrayOutputStream();
Document pdfDocument = new Document();
PdfWriter.getInstance(pdfDocument, byteArr);
pdfDocument.open();
pdfDocument.add(new Paragraph("Hello World!"));
pdfDocument.close();
byte[] byteStream = byteArr.toByteArray();// fetch content in byte array;
PrintService services = PrintServiceLookup.lookupDefaultPrintService();
PrinterJob job = PrinterJob.getPrinterJob();
PDDocument pdDocument = null;
try {
pdDocument = PDDocument.load(byteStream);
job.setPageable(new PDFPageable(pdDocument));
job.setPrintService(services);
job.print();
System.out.println("Done");
} catch (Exception pe) {
pe.printStackTrace();
} finally {
if (pdDocument != null) {
pdDocument.close();
}
}
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>it.fortytwoapps</groupId>
<artifactId>so-50249273</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>
</project>
我有一个使用 iText 库生成的 PDF 文档,然后我使用 ByteArrayOutputStream 将文档保存在内存中以打印它,但它没有打印任何内容。关于为什么不打印的任何想法?您可以在下面找到代码并提前致谢。
ByteArrayOutputStream byteArr = new ByteArrayOutputStream();
Document document = new Document();
PdfWriter.getInstance(document, byteArr);
document.open();
/*
* Adding data and tables to the document
*/
document.close();
DocFlavor docType = DocFlavor.BYTE_ARRAY.AUTOSENSE;
byte[] byteStream = byteArr.toByteArray();// fetch content in byte array;
// byteArr is the ByteArrayOutputStream object
// Tried using InputStream but did not work as well.
Doc documentToBePrinted = new SimpleDoc(byteStream, docType, null);
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
PrintService services = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob job = services.createPrintJob();
try {
job.print(documentToBePrinted, aset);
System.out.println("Donee");
}
catch (Exception pe)
{
pe.printStackTrace();
}
byteArr = null;
}
如果无法 运行 您的代码,这不是一个容易回答的问题。
可能的问题是您没有关闭 PdfDocument
class。
结果,底层资源没有被释放,字节也没有被刷新。
结果生成了一个无效的(有时甚至是空的)PDF文档,打印机当然不会(或不能)打印。
如果您可以存储 PDF,并且它在查看器中正确显示,那么您很可能在应用程序的打印部分做错了。
可能您使用的打印机不直接支持PDF。尝试使用 PDFBox 打印文档。我做了一个小的 maven 项目来测试它,它对我有用:
Main.java:
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;
import javax.print.*;
import java.awt.print.PrinterJob;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
class Main {
public static void main(String[] args) throws DocumentException, IOException {
ByteArrayOutputStream byteArr = new ByteArrayOutputStream();
Document pdfDocument = new Document();
PdfWriter.getInstance(pdfDocument, byteArr);
pdfDocument.open();
pdfDocument.add(new Paragraph("Hello World!"));
pdfDocument.close();
byte[] byteStream = byteArr.toByteArray();// fetch content in byte array;
PrintService services = PrintServiceLookup.lookupDefaultPrintService();
PrinterJob job = PrinterJob.getPrinterJob();
PDDocument pdDocument = null;
try {
pdDocument = PDDocument.load(byteStream);
job.setPageable(new PDFPageable(pdDocument));
job.setPrintService(services);
job.print();
System.out.println("Done");
} catch (Exception pe) {
pe.printStackTrace();
} finally {
if (pdDocument != null) {
pdDocument.close();
}
}
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>it.fortytwoapps</groupId>
<artifactId>so-50249273</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>
</project>