0

私は ApprovalTests.NET を試して、MigraDoc でビルドされた PDF 生成コード (ほとんどがレガシー) をテストしています。テスト対象のコードは、PDF を MemoryStream にレンダリングします。その後、さまざまなメタデータ プロパティがスクラブされ (から適用したコードを使用PdfScrubber)、バイト配列に変換され、 を使用して検証されますApprovals.VerifyBinaryFile()

私のマシンと同僚のマシン (両方とも Windows 10 を実行) ではテストに合格しますが、TeamCity ビルド エージェント (Azure VM、Windows Server 2012 R2 を実行していると思います) では失敗します。受信ファイル (ビルド サーバーで生成) と承認済みファイル (私のマシンで生成) を比較すると、ファイルのメタデータ部分は同じですが、バイナリ部分は完全に異なり、一方のファイルはもう一方のファイルよりも約 1 kb 短くなっています。 .

不一致の原因は何ですか?OS関連の可能性はありますか?

編集

問題はフォントにあるようです (提案については PDFSharp Expert に感謝します)。よく調べてみると、異なる 2 つのバイナリ オブジェクトがあり、これらは明らかにヘッダーと本文のフォントを定義しています。1 つを削除してからもう 1 つを削除すると、ヘッダーと本文のテキストがそれぞれドットに変わります。

では、すべてのマシンがフォントに関して同じ出力を生成することを保証する方法はありますか? これまでのところ、私は試しました:

  • PdfFontEmbedding.Noneのコンストラクターに渡しPdfDocumentRendererます (以前は を使用していましたPdfFontEmbedding.Always)
  • 次のようにプライベートフォントを設定します。

        var fonts = new XPrivateFontCollection();
        var arial = File.ReadAllBytes("path/to/arial/copied/from/windows/server.ttf");
        fonts.AddFont(arial, "Arial");
        XPrivateFontCollection.SetGlobalFontCollection(fonts);
    

どちらの場合も、ローカル マシンで以前と同じ出力が得られます。

4

1 に答える 1

1

問題の PDF ファイルを見なければ、推測することしかできません。

PDF に使用される TTF ファイルは OS によって異なる場合があり、これがファイル サイズに影響する可能性があります。

JPEG 以外の画像はフレームワーク/OS コードを使用して読み取られるため、サイズの違いは画像に起因する場合もあります。

PDF ファイルには多くのオブジェクトが含まれています。PDFsharp は、ある程度人間が読める詳細な PDF ファイルを作成できます (これは DEBUG モードのデフォルトです)。DEBUG ビルドでテストを実行し、PDF ファイルを比較して、どのオブジェクトがサイズの違いに寄与しているかを確認します。

于 2016-08-08T07:39:14.910 に答える