6

プログラムで既存のPDFフォームに記入することに興味があります。私が本当にする必要があるのは、ユーザー入力から情報を引き出し、適切な場所にある既存のPDFの上に適切なテキストを配置することだけです。同じ用紙を2回プリンターに送ることで、reportlabでこれをすでに行うことができますが、これは本当に間違った方法で私をこすります。

ユーザーが入力したテキストを追加する前に、既存の各PDFを個人的にリバースエンジニアリングし、すべての線と文字を自分で描画したいのですが、既存のPDFを取得して、いくつかの余分なテキストの背景。Pythonは私が快適に感じる唯一の言語なので、私は本当にPythonを使用したいと思います。

また、ドキュメント自体をスキャンして、結果のラスタ​​ーイメージを背景として使用できることも理解していますが、ベクターグラフィックスの精度を優先したいと思います。

ReportLabにはこの機能を備えた商用製品があり、私が探している特定の機能が含まれているようです(copyPages)-しかし、非営利目的の単一の単純な機能に対して4桁の製品にお金を払うのはやり過ぎのようです。

4

3 に答える 3

5

PDF フォームが実際のAcroFormである場合は、 iTextを使用して入力できます。iText (java、オリジナル) とiTextSharp (c#)以外のポートがあるかどうかはわかりませんが、ソリューションをオープンソースにすることを気にしないのであれば、使いやすく無料です。このサンプル コードまたは (Java スニペット) をご覧ください。

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();
于 2010-04-26T04:31:56.623 に答える
0

生成している Reportlab PDF の背景に既存の PDF を配置するだけでよいようです。無料のPDFRWライブラリを使用すると、これを簡単に行うことができます。この手法の具体的な例については、ツールの例のページをご覧ください。

于 2011-09-11T23:40:23.353 に答える