2016-10-10 10 views
1

渡されたプリンタ名とPDF URLを使用してPDFを印刷するコードを記述しました。これは、漢字を含むPDFを渡す場合を除いて、文字は単なるボックスです。 UnicodeフォントはPDFで埋め込まれているので、理想的には何とか活用したいと思います。埋め込みフォントを使用したJava印刷PDF

PDDocument document = PDDocument.load(new URL(fileUrl)); 

PrinterJob job = PrinterJob.getPrinterJob(); 
job.setPrintService(printer); 

PageFormat pageFormat = job.defaultPage(); 
Paper paper = pageFormat.getPaper(); 
Book pBook = new Book(); 

List allPages = document.getDocumentCatalog().getAllPages(); 

for (Object pdPage : allPages) 
{ 
    PDPage page = (PDPage) pdPage; 
    double width = page.findMediaBox().getWidth(); 
    double height = page.findMediaBox().getHeight(); 
    double margin = 0.0d; 
    paper.setSize(width, height); 
    paper.setImageableArea(margin, margin, width - (margin * 2), height - (margin * 2)); 
    pageFormat.setOrientation(PageFormat.PORTRAIT); 
    pageFormat.setPaper(paper); 
    PageFormat validatePage = job.validatePage(pageFormat); 
    pBook.append(document.getPrintable(allPages.indexOf(pdPage)), validatePage); 
    job.setPageable(pBook); 
} 

job.setJobName(jobName); 
job.print(); 

ご覧のとおり、PDFBox(バージョン1.8.7)を使用しています。私はこれでいくつかの検索をしましたが、何か有用なものを見つけることができませんでした。しかし、私はこのJIRAの問題を発見しました:https://issues.apache.org/jira/browse/PDFBOX-490

今年(2016年)にリリースされたバージョン2.0で何かが行われたようです。ある時点で、私は最新のバージョンに更新しようとしましたが、私はそうしないように多くの変更がありました。

私の唯一のオプションは更新していますか?私が1.8.7でできることはありますか?

ありがとうございます!

+1

* *「多分何かが、バージョン2.0で行われたようだ」 - 確かに、あなたはしません前の2.0バージョンで成功する。 – mkl

答えて

1

mklのコメントごとにバージョン2.0.3に更新され、中国語の文字が正しく印刷されました。ここに私の新しいコードは更新する必要があったかを見るために私の昔に比べてです:

PrinterJob job = PrinterJob.getPrinterJob(); 
job.setPrintService(printer); 

PageFormat pageFormat = job.defaultPage(); 
Paper paper = pageFormat.getPaper(); 
Book pBook = new Book(); 

PDDocument document = PDDocument.load(new URL(fileUrl).openStream()); // Needs to be a stream now 

PDPageTree allPages = document.getPages(); // no getDocumentCatalog 
for (Object pdPage : allPages) 
{ 
    PDPage page = (PDPage) pdPage; 
    double width = page.getMediaBox().getWidth(); // getMediaBox instead of find 
    double height = page.getMediaBox().getHeight(); // getMediaBox instead of find 
    double margin = 0.0d; 
    paper.setSize(width, height); 
    paper.setImageableArea(margin, margin, width - (margin * 2), height - (margin * 2)); 
    pageFormat.setOrientation(PageFormat.PORTRAIT); 
    pageFormat.setPaper(paper); 
    PageFormat validatePage = job.validatePage(pageFormat); 
    pBook.append(new PDFPrintable(document), validatePage, document.getNumberOfPages()); // Completely different 
} 

job.setPageable(pBook); // Moved this out of the loop, just cause it only needs to be called once 
job.setJobName(jobName); 
job.print(); 
関連する問題