こんにちは、PDF シャープを使用して、ユーザー入力をテンプレート ドキュメントの位置に印刷しています。
データ (フィールド) はユーザー (Web ページ) から収集され、巾着方式を使用してドキュメントの適切な位置に書き込まれます。
現在、各ページのテンプレート化された各フィールドのピクセル位置を試行錯誤で見つけています.pdfページの各フィールドのピクセル位置を決定する方法があれば、はるかに簡単です。
どんな提案でも最も役に立ちます。
ありがとう
PDF Sharpを使用したときのアプローチは、XUnit構造体を使用し、ドキュメントの左上の点をX/Y位置の開始点として参照することでした。
明らかに、PdfPageのすべての要素についてドキュメントの左上のポイント(0,0)を参照すると、面倒になります。これに対抗するために、XRectクラスを使用して、要素を配置するための長方形を作成しました。XRectがページに描画されると、XRectのプロパティを介して長方形のX/Y位置を参照できるようになります。次に、これらの座標とXRectの幅/高さを使用したいくつかの基本的な計算により、PdfPageに追加する次の要素の位置の座標を計算できるはずです。
このコードサンプルに従って、最終結果がどうなるかについての大まかなスケッチを提供しました。コードはテストされていませんが、現在本番環境にあるコードに非常に大きく基づいています。
// Create a new PDF document
PdfDocument document = new PdfDocument();
// Create an empty page with the default size/orientation
PdfPage page = document.AddPage();
page.Orientation = PageOrientation.Landscape;
page.Width = XUnit.FromMillimeter(300);
page.Height = XUnit.FromMillimeter(200);
// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
// Add the first rectangle
XUnit horizontalOffset = XUnit.FromMillimeter(5);
XUnit verticalOffset = XUnit.FromMillimeter(5);
XUnit columnWidth = XUnit.FromMillimeter(100);
XUnit columnHeight = page.Height - (2 * verticalOffset);
XRect columnRect = new XRect(horizontalOffset, verticalOffset, columnWidth, columnHeight);
gfx.DrawRectangle(XBrushes.Teal, columnRect);
// Insert an image inside the rectangle, referencing the Left and Top properties of the rectangle for image placement
XImage topLogo = XImage.FromFile(GetFilePath(@"content\img\pdfs\standard\logo-no-strapline.jpg")); // GetFilePath is a private method, not shown for brevity
gfx.DrawImage(topLogo,
columnRect.Left + XUnit.FromMillimeter(5),
columnRect.Top + XUnit.FromMillimeter(5),
columnRect.Width - XUnit.FromMillimeter(10),
XUnit.FromMillimeter(38));
そして出力:
最後に、ご存知だと思いますが、ここにPdfSharpサンプルの優れたリソースがあります。
PDFファイルにはピクセルもピクセル位置もありません。
PDFページを印刷し([実際のサイズ]サイズオプションを使用)、定規を使用して位置を測定できます(これは当社のプリンターでかなりうまく機能します)。
または、Adobe Acrobatを使用して、PDFページ上のアイテムの位置を測定できます。
あなたが0.5ミリメートルを与えるか、または取らなければならないかもしれないので、少しの試行錯誤が残っています。
ルーラーに応じて、XUnit.FromMillimeterまたはXUnit.FromInchを使用して、PDFsharpのポイント位置を取得できます(ただし、ポイントはピクセルではありません)。
現在のPDFsharpサンプルはここにあります:
http ://www.pdfsharp.net/wiki/PDFsharpSamples.ashx