2010-04-26 2 views
6

프로그래밍 방식으로 기존 PDF 양식을 작성하는 데 관심이 있습니다. 필자가해야 할 일은 사용자 입력에서 정보를 가져 와서 해당 텍스트를 적절한 위치에있는 기존 PDF 위에 배치하는 것입니다. 나는 이미 같은 용지를 프린터에 두 번 공급하여 reportlab을 사용하여이 작업을 수행 할 수 있지만이 작업은 잘못된 방식으로 나를 문지른다.reportlab을 사용하여 기존 PDF에 텍스트 추가

사용자 입력 텍스트를 추가하기 전에 각각의 기존 PDF를 개인적으로 리버스 엔지니어링하고 모든 라인과 캐릭터를 직접 그려야하지만, 기존 PDF를 쉽게 가져올 수 있는지 확인하고 싶습니다. 일부 추가 텍스트의 배경으로 설정하십시오. 파이썬을 사용하는 것이 내가 익숙한 유일한 언어이기 때문에 정말 파이썬을 사용하는 것을 선호합니다.

나는 또한 문서 자체를 스캔하여 결과 래스터 이미지를 배경으로 사용할 수 있다는 것을 알고 있지만 벡터 그래픽의 정밀도를 선호합니다.

ReportLab has a commercial product with this functionality처럼 보이지만 내가 찾고있는 특정 기능은 copypages에 있습니다.하지만 비영리 사용을위한 단일 기능의 단순한 기능을 위해 4 피겨 제품을 지불하는 것은 과도한 것처럼 보입니다.

답변

5

PDF 양식이 AcroForms 인 경우 iText을 사용하여 입력 할 수 있습니다. iText (java, original) 및 iTextSharp (C#) 이외의 다른 포트가 있는지 모르지만 솔루션을 오픈 소스하지 않으려면 사용하기 쉽고 무료입니다. 이 sample code 또는 (자바 조각)에서 좀 걸릴 수 있습니다 : 당신은 당신이 생성되는 Reportlab의 PDF의 배경에있는 기존 PDF를 배치해야처럼

String formFile = "/path/to/myform.pdf" 
String newFile = "/path/to/output.pdf" 
PdfReader reader = new PdfReader(formFile); 
FileOutputStream outStream = new FileOutputStream(newFile); 
PdfStamper stamper = new PdfStamper(reader, outStream); 
AcroFields fields = stamper.getAcroFields(); 

// fill the form 
fields.setField("name", "Shane"); 
fields.setField("url", "http://stackoverflow.com"); 

// PDF infos 
HashMap<String, String> infoDoc = new HashMap<String, String>(); 
infoDoc.put("Title", "your title here"); 
infoDoc.put("Author", "JRE ;)"); 
stamper.setMoreInfo(infoDoc); 

// Flatten the PDF & cleanup 
stamper.setFormFlattening(true); 
stamper.close(); 
reader.close(); 
outStream.close(); 
0

그것은 소리. 무료 PDFRW 라이브러리에서 쉽게이 작업을 수행 할 수 있습니다. 이 기술의 몇 가지 구체적인 예를 보려면 Example Tools page을 살펴보십시오.

2

미리 인쇄 된 용지에 텍스트를 추가하기 만하면됩니다. jpg로 스캔 한 다음이 jpg를 배경으로 넣을 수 있습니다. reportlab 설명서의 15 번째 페이지를 참조하십시오. drawImage를 호출하십시오.

관련 문제