7

ファックスを受信したときに自動化されたシステムから入ってくる PDF ドキュメントをデータベースに保持するために使用する Web アプリを作成しています。ユーザーはこれらのドキュメントを確認できる必要があり、これらのドキュメントで実行できるようにする必要があるより一般的なことの 1 つは、間違った方法でファックス機に挿入されたときに個々のページを反転/回転させることです。これはほとんどの場合、ページの 180 度回転です。これを行う関数を作成しましたが、これは機能しているように見えますが、最初に呼び出されたときだけです。この関数への後続の呼び出しは、もはや機能していないようです。この関数に関連するもう 1 つの奇妙な点は、ドキュメントの選択した場所にテキストを追加する別のメソッドが呼び出されることです。テキストといくつかの座標を渡します。そして、ドキュメント内のそれらの座標にテキストを書き込みます。すべて問題ありません。これの問題は、ドキュメントを回転させた後(一度だけ回転さます)、ユーザーがドキュメントのどこかにテキストを追加しようとすると、テキストを配置する座標が逆になり、テキストが上下逆になります。

以上のことから、最終的にはページの回転が間違っていることがわかります。PdfSharp ドキュメントのページを正しい方法で回転させる方法の良いサンプルが見つからないようです。そのため、いくつかのガイダンスが非常に役立ち、非常に高く評価されます。前もって感謝します。

ページを回転させ、ページにテキストを追加するために現在使用しているコードは次のとおりです。

// This is how I'm rotating the page...
public PdfDocument FlipPage(byte[] documentSource, int pageNumber)
{
    using (var stream = new MemoryStream())
    {
        stream.Write(documentSource, 0, documentSource.Length);
        var document = PdfReader.Open(stream);
        var page = document.Pages[pageNumber - 1];
        page.Rotate = 180;

        return document;
    }
}

// This is how I'm adding text to a page...
public static void AddTextToPage(this PdfDocument document, int pageNumber, Annotation annotation)
{
    var page = document.Pages[pageNumber - 1];
    annotation.TargetHeight = page.Height.Value;
    annotation.TargetWidth = page.Width.Value;

    var graphics = XGraphics.FromPdfPage(page);
    var textFormatter = new XTextFormatter(graphics);
    var font = new XFont("Arial", 10, XFontStyle.Regular);
    graphics.DrawString(annotation.Text, font, XBrushes.Red, new PointF((float)annotation.TargetX, (float)annotation.TargetY));
}
4

1 に答える 1

7

それは私の専門分野ではありませんが、「page.Rotate = 180;」の代わりに 私はそのようなことを試してみます:

page.Rotate = (page.Rotate + 180) % 360;

(コードはテストされていません。キャストが必要な場合があります)

テキストを追加するときは、「page.Rotate == 180」をテストしてから、別のコードを使用できます (「graphics.RotateTransform(180)」など)。

于 2011-12-13T09:53:32.223 に答える