2016-04-29 5 views
-1

私はPDFドキュメントを作成するためにPdfSharpを評価しています。それをMigraDocと比較しながら、それぞれの位置(x、y)またはサイズに1.25を掛けて、意図した結果を得なければならないと考えました。たとえば、ページマージンを2cmに設定した場合、余白は約1.6cmになります。私は1.25と2を乗算するとPdfSharp:正しい結果を得るには、位置とサイズに1.25を掛ける必要があるのはなぜですか?

page.TrimMargins = new TrimMargins 
{ 
    All = XUnit.FromCentimeter(2) 
}; 

私が意図した2cmの余白を取得:

page.TrimMargins = new TrimMargins 
{ 
    All = XUnit.FromCentimeter(2 * 1.25) 
}; 

同じフォントサイズです。 MigraDocと同じサイズを得るためにはサイズを1.25倍しなければならないし、Wordでも印刷する必要がある。

私のシステムにはカスタムスケーリングや100%以外のテキストサイズはありません(私の推測ではこれが原因である可能性があります)。

誰かがここで何が起こっているのか説明できますか?

編集: TomasHの助けを借りて、自動サイズ調整なしで印刷するとサイズ調整が完璧だったことがわかりました。 PdfSharpは明らかに大きすぎるPDF文書を作成します。 MigraDocと同じことをするとき、PDFは私が見つけたように大きすぎますが、はるかに小さいスケールでしかありません。残る質問は、文書が大きすぎることと、MigraDocがPDFサイズを修正するために行うことです。ここで

が唯一の正しいポジショニングを与え、補正係数とサイズの私の完全なテストコードです:

using (PdfDocument document = new PdfDocument()) 
{ 
    // Create an empty page size A4 with defined margins 
    PdfPage page = CreatePage(document); 
    using (XGraphics graphics = XGraphics.FromPdfPage(page)) 
    { 
     const double sizeCorrectionFactor = 1.25; 
     // Define the page margins. They must be multiplied by 1.25 to be correct!? 
     page.TrimMargins = new TrimMargins 
     { 
      All = XUnit.FromCentimeter(2 * sizeCorrectionFactor) 
     }; 

     // Draw a string. The font size needs to be multiplied by 1.25 to be correct!? 
     double x = 0; 
     double y = 0; 
     graphics.DrawRectangle(XPens.Black, XBrushes.White, 0, 0, page.Width, page.Height); 
     graphics.DrawString("PdfSharp Measure Demo", new XFont("Verdana", 20 * sizeCorrectionFactor), XBrushes.Navy, x, y, XStringFormats.TopLeft); 

     // Draw a rectangle. Position and size must be multiplied by 1.25 to be correct!? 
     x = XUnit.FromCentimeter(2 * sizeCorrectionFactor); 
     y = XUnit.FromCentimeter(2 * sizeCorrectionFactor); 
     double width = XUnit.FromCentimeter(5 * sizeCorrectionFactor); 
     double height = XUnit.FromCentimeter(5 * sizeCorrectionFactor); 
     graphics.DrawRectangle(XPens.Red, XBrushes.Silver, x, y, width, height); 
    } 

    string pdfFilePath = Path.GetTempFileName() + ".pdf"; 
    document.Save(pdfFilePath); 

    Process.Start(pdfFilePath); 
} 
+0

Adob​​e Readerで測定した場合、または印刷後に間違っていますか?自動スケーリングなどなしで100%で印刷します。 PDFとプリンタが同じページサイズを使用していることを確認してください。 –

+0

私は100%で印刷し、サイジングは完璧でした。どうやらPdfSharpは、PDF文書をあまりにも大きく作成します。 MigraDocと同じことをするとき、PDFは私が見つけたように大きすぎますが、はるかに小さいスケールでしかありません。なぜそうであるのか、MigraDocがPDFサイズを修正するために何をするのかを理解する必要があります。 –

答えて

1

私は答えを見つけた:私は(うまく文書化されていません)TrimMargins財産間違ったの意味を得ました。トリムマージンを設定すると、ページの幅や高さにマージンのサイズが追加されることは明らかです。つまり、トリムマージンが設定されている場合は、ページサイズが大きすぎ、通常は表示または印刷するときに縮小されます。私はトリミングマージンのために2cmを設定して、ページを明らかに1.25倍大きくしました。解決策は、すべてのトリミングマージンを0にして、代わりに印刷コードの任意のページ余白を考慮することです。

関連する問題