通过Java打印不会打印应用于pdf上的叠加文字

时间:2018-08-17 00:10:13

标签: java itext pdfbox

我正在研究使用iText 7.0.4在pdf上应用文本覆盖的要求。 Ovlery可以毫无问题地应用到源pdf上,我可以通过Acrobat文件->打印进行打印,并且可以使用覆盖信息很好地打印pdf。当我尝试使用PDFBox2.0.3 / Java代码打印pdf时,不会打印覆盖文本,但是pdf上的其余文本可以很好地打印。

通过查看pdf,其中包含一种字体,例如Arial MT(嵌入),类型:TrueType,编码:Ansi。我使用Arail作为叠加文字的字体。 通过Java代码打印时,我在日志中看到以下错误

13:27:49.813 [Finalizer]调试o.apache.pdfbox.io.ScratchFileBuffer-ScratchFileBuffer未关闭!

13:28:28.726 [main]调试o.apache.fontbox.ttf.PostScriptTable-没有为ArialMT字体提供PostScript名称信息

当我使用PDF Optimizer将pdf保存为新的pdf文档时,相同的代码将打印pdf包括叠加文本。 我看到除ArialMT字体外,还在属性-> pdf字体中添加了另一种字体ArialMT(嵌入子集)。

我发现此链接在调试https://support.visiolink.com/hc/en-us/articles/200003811-How-to-fix-Disappearing-or-Strange-Looking-Elements-in-the-PDF

时非常有用

关于在Java打印过程中为什么缺少文本的任何指针都是有帮助的。

下面是pdf链接和用于打印pdf的代码。

问题是pdf中的L203040OT没有用Java代码打印。

该代码适用于PDFBox 1.8.15,但不适用于2.0.10。

使用PDFBox 1.8.15版本执行“ Printingpdf.java”代码,我看到的日志跟踪为 “ 11:59:08.213 [main] INFO o.a.pdfbox.pdmodel.font.PDType0Font-使用字体SansSerif.plain代替Arial。” 与2.0.10版本执行的相同代码的日志跟踪为 “ 22:50:04.226 [main]调试o.apache.fontbox.ttf.PostScriptTable-没有为字体Calibri提供PostScript名称信息。”

PDF链接https://github.com/ashokvytla/myproject/blob/master/659192_print.pdf

java代码:

package printing;

import java.awt.print.PrinterJob;
import java.io.File;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.PageRanges;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPageable;
public class Printingpdf {

public static PDDocument _pdfDocument=null;

public static void main(String[] args) {
    try {
        String printername="defaultprinter";
        String templateFillablePDFFile = "printingdocs/659192_print.pdf";
        PrinterJob printerjob=PrinterJob.getPrinterJob();
        printerjob.setPrintService(PrintServiceLookup.lookupDefaultPrintService());
        _pdfDocument = PDDocument.load(new File (templateFillablePDFFile));
        //printerjob.setPageable(new PDFPageable(_pdfDocument));  //uncomment this 2.0.10
        printerjob.setPageable(new PDPageable(_pdfDocument));   //Comment this for 2.0.10
        PrintRequestAttributeSet  attributes=new HashPrintRequestAttributeSet();
        int pageRangesArr[][]={ {1,2}   };
        attributes.add(new PageRanges(pageRangesArr));
          if(printerjob.printDialog()) {
            printerjob.print(attributes);
        }

        System.out.println("printer name==>"+printername);
        _pdfDocument.close();
     } catch(Exception e) {e.printStackTrace();
     }
    }
}

0 个答案:

没有答案