2017-03-28 27 views
0

我正在使用PDFBox创建PDF,并且我在PDF上插入了一个基本上为曲线边框和一些社交网络信息的“背景”图像。PDFBox创建在每个浏览器中以不同方式显示的PDF

请找我用来生成PDF的代码如下:

PDDocument document = new PDDocument(); 
    PDPage page = new PDPage(); 

    document.addPage(page); 
    PDPageContentStream contentStream = new PDPageContentStream(document, page); 

    PDImageXObject pdImage = PDImageXObject.createFromFile(basePath+"images/"+ticket.getId()+".png", document); 
    PDImageXObject backgroundImage = PDImageXObject.createFromFile(basePath+"images/ticket_template.jpg",document); 

    backgroundImage.setWidth(595); 
    backgroundImage.setHeight(800); 

    contentStream.drawImage(backgroundImage,10,0); 
    contentStream.drawImage(pdImage,(page.getMediaBox().getWidth() - pdImage.getWidth())/2,page.getMediaBox().getHeight()-400); 

    float margin = 50; 
    // starting y position is whole page height subtracted by top and bottom margin 
    float yStartNewPage = page.getMediaBox().getHeight() - (2 * margin); 
    // we want table across whole page width (subtracted by left and right margin ofcourse) 
    float tableWidth = page.getMediaBox().getWidth() - (2 * margin); 

    boolean drawContent = true; 
    float yStart = yStartNewPage; 
    float bottomMargin = 70; 
    // y position is your coordinate of top left corner of the table 
    float yPosition = 550; 
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); 

    BaseTable table = new BaseTable(400, yStartNewPage, bottomMargin, tableWidth, margin, document, page, true, drawContent); 
    generateTable(table,"Event",event.getName()); 
    generateTable(table,"Código",ticket.getId()); 
    generateTable(table,"Data Ínicio",dateFormat.format(event.getStartDate())); 
    generateTable(table,"Data Fim",dateFormat.format(event.getEndDate())); 
    generateTable(table,"Mesa",eventTable.getName()); 
    generateTable(table,"Número de Convidados",ticket.getNumberOfPeople()+""); 

    table.draw(); 

    contentStream.close(); 

    document.save(new File(basePath+"docs/"+ticket.getId()+".pdf")); 

    document.close(); 

当图像被打开了镀铬似乎错位:

Image on chrome

The second image is how it appears in google chrome

我似乎也有问题将颜色插入到PDF中,并且在转换PDF时它们也显得很奇怪o图像

+1

请分享有问题的pdf进行分析。 – mkl

回答

1

浏览器近似PDF渲染达到一定程度,这意味着几乎没有浏览器实现PDF详述。

这适用于几乎所有的PDF渲染引擎,最真实的是自然的Adobe PDF阅读器,这实际上是参考实现。

在过去,浏览器使用第三方插件来嵌入PDF,但这带来了安全问题,现在他们自己做。

因此,您不能完全依赖单一浏览器来确保您的PDF每次都能正确显示,这是一个试验和错误过程(对于其他实现PDF呈现的软件(如PDF打印机)也是如此)。

唯一明智的解决办法是:

  1. 先试试它的Acrobat(它至少参考)
  2. 与浏览器检查它,如果他们不遵守努力实现同样的结果不同的技术。

PDF这是一个非常复杂的规格,有很多不同的方式来获得一些结果,尝试最简单的。

相关问题