2017-10-25 1 views
0

pdfbox를 사용하여 pdf 파일에 행을 추가하고 있습니다. 그러나 내가 추가하고있는 텍스트는 바뀐 것입니다. 생성 된 pdf에서 텍스트가 역순입니다

File file = new File(filePath); 
PDDocument document = PDDocument.load(file); 

PDPage page = document.getPage(0); 
PDPageContentStream contentStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,true); 

int stampFontSize = grailsApplication.config.pdfStamp.stampFontSize ? grailsApplication.config.pdfStamp.stampFontSize : 20 
contentStream.beginText(); 
contentStream.setFont(PDType1Font.TIMES_ROMAN, stampFontSize); 

int leftOffset = grailsApplication.config.pdfStamp.leftOffset ? grailsApplication.config.pdfStamp.leftOffset : 10 
int bottomOffset = grailsApplication.config.pdfStamp.bottomOffset ? grailsApplication.config.pdfStamp.bottomOffset : 20 
contentStream.moveTextPositionByAmount(grailsApplication.config.xMove,grailsApplication.config.yMove) 
contentStream.newLineAtOffset(leftOffset, bottomOffset) 

String text = "i have added this line...!!!!"; 
contentStream.showText(text); 
contentStream.endText(); 

contentStream.close(); 

document.save(new File(filePath)); 
document.close(); 

byte[] pdfData; 
pdfData = Files.readAllBytes(file.toPath()); 
return pdfData; 

은 내가 moveTextPositionByAmount 방법을 사용하여 시도하지만,이 텍스트에 어떤 영향을 미칠 것 같지 않습니다. 왜 내 텍스트가 바뀌었고 어떻게 방향을 바꿀 수 있도록 설정할 수 있습니까? 원인은 당신이 스탬핑 된 PDF 안에 있어야하므로

Please see the image of pdf output

+1

질문이 iText, 태그 제거에 대해이 아니다. –

답변

1

코드는 그 자체로 미러링 된 출력을 유발하지 않습니다. 불행히도 문제의 PDF를 제공하지 않으므로 여기에서 추측해야합니다.

대부분의 경우 문제는 끝에있는 재설정 페이지를 수정하지 않고 현재 변환 행렬을 미러링 아핀 변환으로 설정 한 기존 페이지 컨텐트가 원인입니다. 그 사실 인 경우에

, PDFBox 쉬운 해결 방법을 제공합니다 당신은 구성

당신 같은 PDPageContentStream :

PDPageContentStream contentStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,true); 

추가 boolean 인수를 받아들이는 또 다른 생성자가 있습니다.

PDPageContentStream contentStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,true,true); 

가주의 :를이 참으로 문제를 해결하는 경우 현재 사용하는 좌표와 오프셋에 의존 당신이 true에 추가 인수를 설정하는 생성자를 사용하는 경우, PDFBox 콘텐츠의 그래픽 상태를 다시 시도 변환 행렬은 그대로 변경됩니다. 이 경우 적절하게 업데이트해야합니다.


다른 방법으로 카운터 미러링을 도입하면 도움이 될 수 있습니다. 텍스트 객체의 각각의 시작과 같은 텍스트 행렬을 설정하여 :

contentStream.beginText(); 
contentStream.setTextMatrix(new Matrix(1f, 0f, 0f, -1f, 0f, 0f)); 

이후 모든 Y 변화가 특히 contentStream.moveTextPositionByAmountcontentStream.newLineAtOffset의 두 번째 인수를 부정 할 필요가 좌표입니다.

은 (당신이 두 경우 모두 후자를 사용할 수 있도록 그런데, moveTextPositionByAmountnewLineAtOffset는, 전자는 단지 사용되지 않는 변종, 같은 않습니다.)

관련 문제