【问题标题】:Why am i getting totally different from normal print out using PDFBox?为什么我与使用 PDFBox 的正常打印结果完全不同?
【发布时间】:2014-05-20 11:51:31
【问题描述】:

我在使用 PDFBox 打印 PDF 文件时遇到问题。它与普通的打印输出完全不同。 我实现了一个 java 程序来打印 PDF。

PDFPageable pdfPageable =new PDFPrinter(document).getPageable();
printerJob.setPageable(pdfPageable);
printerJob.print(printRequestAttributeSet);

我不确定为什么我的打印结果与正常打印结果完全不同?

【问题讨论】:

  • 请提供说明问题的 PDF。
  • 还有打印输出。要么扫描它,要么将其打印到虚拟 PDF 打印机,以便我们了解“与正常打印完全不同”的含义 - 您是否有粉红色背景,是否旋转 45°,是否缺少字形,或者是否镜像,还是包含新文本?另请阅读最近几天有关 PDFBox 打印的问题。
  • 当我打印 pdf 文件时,右键单击并发送到打印机和 java + pdfbox 不同。比如文字、布局等
  • 是的,但它有什么不同?我们只能通过获取 PDF 和渲染图像来解决这个问题。您可以使用命令行应用程序的“PDFReader”选项在文件中渲染图像。另请参阅我在答案中的其他评论:最新版本的问题。也许打开 JIRA 的问题并附上您的 PDF 和渲染的图像。

标签: java apache pdf printing pdfbox


【解决方案1】:

接缝您使用 PDFBox jar 快照。我看到他们经常发布。我认为你最好与开发支持团队沟通并完成它。接缝是一个渲染问题。

【讨论】:

  • 你是对的,我正在使用最新的 pdfbox 快照进行开发。
  • 我刚刚意识到 - 最后一次更改(rev 1595992)有问题,请参阅我在 PDFBOX-1689 末尾的评论。最好的办法是你回到上一个或等到它修复(希望今晚)。
  • 伙计们.. 即使我将文档设置为可打印的打印机Job.setPrintable(new PDFPrinter(document).getPageable().getPrintable(document.getNumberOfPages() - 1), new PDFPrinter(document).getPageable ().getPageFormat(document.getNumberOfPages() - 1));现在我面临一些字体问题。
  • 嗯,是的,PDFBOX-1689 末尾提到的更改确实存在字体问题。为什么没有几天前的版本?
  • 你能告诉我哪个版本没有字体问题。我说的是 2.0.0 快照
【解决方案2】:

试试这个(改编自java api 中的示例)

  import java.io.*;
  import javax.print.*;
  import javax.print.attribute.*; 
  import javax.print.attribute.standard.*;  

 public class PrintTest{

  public static void main(String args[]){

    FileInputStream psStream = null;
    try {
        psStream = new FileInputStream("some.pdf");
        } catch (FileNotFoundException ffne) {
          ffne.printStackTrace();
        }
        if (psStream == null) {
            return;
        }
    DocFlavor psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
    Doc myDoc = new SimpleDoc(psStream, psInFormat, null);  
    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
    PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset);

    // this step is necessary because I have several printers configured
    PrintService myPrinter = null;
    for (int i = 0; i < services.length; i++){
        System.out.println("service found: "+svcName);
        String svcName = services[i].toString();           
        if (svcName.contains("printer closest to me")){
            myPrinter = services[i];
            System.out.println("my printer found: "+svcName);
            break;
        }
    }

    if (myPrinter != null) {            
        DocPrintJob job = myPrinter.createPrintJob();
        try {
        job.print(myDoc, aset);

        } catch (Exception pe) {pe.printStackTrace();}
    } else {
        System.out.println("no printer services found");
    }
   }
  }

【讨论】:

  • 好吧,这个答案基于 javax api。我的问题是关于 PDFBox。我也有打印输出的问题。我得到的是与正常打印完全不同
猜你喜欢
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多