2017-03-28 6 views
0

PDF를 만들기 위해 PDFBox를 사용하고 있으며 기본적으로 곡선 테두리와 일부 소셜 네트워크 정보 인 "배경"이미지를 PDF에 삽입합니다. 이미지가 크롬을 열 때PDFBox는 각 브라우저마다 다르게 표시되는 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(); 

가 잘못 될 것 같다 :

내가 PDF를 생성하기 위해 사용하는 코드를 검색

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. (이것은 최소한의 기준이다) 아크로뱃에 처음 시도가와 같은 결과를 달성하기 위해 시도를 준수하지 않을 경우
  2. 은 브라우저를 확인하고 :

    유일한 합리적인 해결책이다 다른 기술.

PDF 매우 복잡한 사양이며 몇 가지 결과를 얻으려면 여러 가지 방법이 있지만 가장 간단한 방법을 시도해보십시오.