2017-03-06 19 views
0

私はPDFの透かしを入れるアプリケーションを開発しようとしています。私は正しい形式でPDF文書を保存することに問題があります。PDFsharpが正しいページサイズで表示されない

私が気付いたのは、プルインされたドキュメントがページサイズを1つのものとして読み取ることに気付きましたが、ドキュメントの一部を保存するときに切り捨てられます。たとえば、レターサイズに対応する792x612 ptsのランドスケープに保存されたドキュメントがあります。しかし、手紙に保存すると、ページの一部が切り取られます。 A1に文書を保存すると、文書全体が表示されることに気付きました。ここに私のコードです:

  Dim gfx As XGraphics = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append) 
      gfx.RotateTransform(-90) 
      Dim font As XFont = New XFont("Times New Romans", 6, XFontStyle.Bold) 
      Dim tf As XTextFormatter = New XTextFormatter(gfx) 
      Dim rect As XRect = New XRect(-550, 500, 250, 150) 
      gfx.DrawRectangle(XBrushes.Transparent, rect) 
      tf.DrawString(Text, font, XBrushes.Red, rect) 
      page.Size = PdfSharp.PageSize.A1 
      page.Orientation = PdfSharp.PageOrientation.Landscape 
      Doc.save(strFileSaveLocation) 

これは何らかの理由がありますか?私はpage.heightとpage.widthを読んでいて、これが正しいことを確認してから続行します。

+0

は* *問題に解決策を編集する代わりに、それを独自の権利で*回答*を作り、あなたが許可されるとすぐにそれを受け入れないでください。 – mkl

答えて

1

ページをランドスケープ形式で処理する場合、PDFsharpには既知のバグがあります。このバグはPDFharp 1.50 beta 3bまで存在しますが、次のリリースで修正する必要があります。 PDFsharpフォーラムで

参照の議論:PdfPage.csで
http://forum.pdfsharp.net/viewtopic.php?p=9591#p9591

推奨修正:

internal PdfPage(PdfDictionary dict) 
    : base(dict) 
{ 
    // Set Orientation depending on /Rotate. 
    //int rotate = Elements.GetInteger(InheritablePageKeys.Rotate); 
    //if (Math.Abs((rotate/90)) % 2 == 1) 
    // _orientation = PageOrientation.Landscape; 
} 

あなたがPDFsharpを変更したくない場合は、おそらく最初のポストからの回避策を試してください。
http://forum.pdfsharp.net/viewtopic.php?p=9587#p9587

+0

ありがとうございます。ある程度貯蓄の問題を修正したようだ。あなたが知っているのですが、PDFpage.sizeとPDFpage.widthのバグはありますか?一度ページの向きが固定されると、ページサイズを読むことができると思っていましたが、一部のドキュメントは肖像画の大きさが明確なランドスケープとして表示されていて、それらを保存する機能は、風景。テキストが入っている方向を知る別の方法を知っているかもしれませんか? – user2823955

+0

@ user2823955新しいページを作成するとき、ページの 'サイズ'と '向き'は動作しますが、既存のページを開くときには機能しません。 'Size'と' Orientation'はページのサイズを決定しますが、 'Width'と' Height'だけがPDFファイルに残っています。 –

0

私と同じ問題に遭遇している他の人にとっては、答えは単に向きを設定することです肖像画に。これにより、何らかの理由で文書が正しく保存されます。 PDFsharp初心者の答えはあなたのコードをある程度修正することができますが、あなたが私のようなもので、ページを処理するために向きを知る必要がある場合、解決策は向きを縦向きに戻します。ページの幅と高さをリセットする必要があるかもしれません。

コード:

page.Orientation = PdfSharp.PageOrientation.Portrait 
page.Width = dblPageWidth 
page.Height = dblPageHeight 
関連する問題