我正在尝试打印使用docx4j生成的Word文档,我将其转换为PDF并使用PDFBox进行打印。我正在尝试打印的文档只包含一个带有基本英文文本的简单表格。
这是我使用的方法:
private void printDocument(){
PrinterJob job = PrinterJob.getPrinterJob();
try {
PDDocument document;
document = PDDocument.load("files\\textDocs\\OITScanSheet.pdf");
job.setPageable(new PDPageable(document, job));
job.setJobName("OIT Scan Sheet");
job.print();
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (PrinterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这就是我要打印的内容: Before print
这是我打印时出来的(抱歉质量很差): After print
表格完整且行数正确,但文本不存在。当我从Adobe Reader打印文档时,它应该打印出来。
我现在正在使用PDFBox 2.0.0快照。我从版本1.8.4切换,因为我遇到了this问题,它正确地打印了表,但所有文本都是垃圾。
我很确定这个问题与幕后的某种字体问题有关,但我不知道如何修复它。任何帮助将不胜感激。
答案 0 :(得分:0)
如果你真的需要printDialog,这是一个随时可用的代码,假设你的类路径中有PDFBox 2.0和字体2.0
public static void PDFPrintingServices(String filePath) throws IOException, PrinterException {
PrintRequestAttributeSet attr_set = new HashPrintRequestAttributeSet();
attr_set.add(MediaSizeName.ISO_A4);
attr_set.add(Sides.ONE_SIDED);
PDDocument pdf = PDDocument.load(new File(filePath));
PDFPageable p = new PDFPageable(pdf);
PDFPrintable printable = new PDFPrintable(pdf, Scaling.SCALE_TO_FIT);
PrinterJob job = PrinterJob.getPrinterJob();
job.setJobName("My Printer");
job.setPageable(p);
job.setPrintable(printable);
if(job.printDialog()) {
job.print();
job.print(attr_set);
}
}