2017-08-29 130 views
0

保存すると画像のデザインは正しいですが、PDFのテキストが間違っています。なぜドキュメントが異なるのか説明できますか?MigraDocとPDFsharpは、PDFと画像として保存するときに別の文書を表示します

また、ドキュメント全体のPDFを保存し、複数ページのドキュメントの選択したページを印刷するための他のソリューションも利用できます。

感謝:)

EDIT:画像が正しいと私はPDFを表示したいですが、代わりにPDFが「TESTテスト」

を示している日付(「2016年5月24日」)を示しています
public static void pdf() { 
     DateTime now = DateTime.Now; 
     string filename = "MixMigraDocAndPdfSharp.pdf"; 
     filename = Guid.NewGuid().ToString("D").ToUpper() + ".pdf"; 
     PdfDocument document = new PdfDocument(); 

     SamplePage1(document); 

     document.Save(filename); 

     Process.Start(filename); 

    } 
static void SamplePage1(PdfDocument document) { 
     PdfPage page = document.AddPage(); 
     XGraphics gfx = XGraphics.FromPdfPage(page); 
     gfx.MUH = PdfFontEncoding.Unicode; 
     gfx.MFEH = PdfFontEmbedding.Default; 

     XFont font = new XFont("Verdana", 13, XFontStyle.Bold); 
     gfx.DrawString("TEST TEST", font, XBrushes.Black, 
         new XRect(100, 100, page.Width - 200, 300), XStringFormats.Center); 

     Document doc = new Document(); 
     Section sec = doc.AddSection(); 
     Paragraph para = sec.AddParagraph(); 

     header("24th May 2016"); 

     DocumentRenderer docRenderer = new DocumentRenderer(doc); 
     docRenderer.PrepareDocument(); 

     docRenderer.RenderObject(gfx, XUnit.FromCentimeter(5), XUnit.FromCentimeter(10), "12cm", para); 
     PageInfo info = docRenderer.FormattedDocument.GetPageInfo(1); 

     int dpi = 150; 
     int dx, dy; 
     if (info.Orientation == PdfSharp.PageOrientation.Portrait) { 
      dx = (int)(info.Width.Inch * dpi); 
      dy = (int)(info.Height.Inch * dpi); 
     } else { 
      dx = (int)(info.Height.Inch * dpi); 
      dy = (int)(info.Width.Inch * dpi); 
     } 

     Image image = new Bitmap(dx, dy, PixelFormat.Format32bppRgb); 
     Graphics graphics = Graphics.FromImage(image); 
     graphics.Clear(System.Drawing.Color.White); 
     float scale = dpi/72f; 
     graphics.ScaleTransform(scale, scale); 
     gfx = XGraphics.FromGraphics(graphics, new XSize(info.Width.Point, info.Height.Point)); 
     docRenderer.RenderPage(gfx, 1); 
     gfx.Dispose(); 
     image.Save("test.png", ImageFormat.Png); 
     doc.BindToRenderer(docRenderer); 
     docRenderer.RenderObject(gfx, XUnit.FromCentimeter(5), XUnit.FromCentimeter(10), "12cm", para); 
     Process.Start("mspaint", "test.png");   
    } 
public static void header(String date) { 
     Paragraph paragraph = new Paragraph(); 

     var dateIssued = firstPage.AddTextFrame(); 
     dateIssued.Height = "1.0cm"; 
     dateIssued.Width = "6.0cm"; 
     dateIssued.Left = "2.1cm"; 
     dateIssued.RelativeHorizontal = RelativeHorizontal.Margin; 
     dateIssued.Top = "3.55cm"; 
     dateIssued.RelativeVertical = RelativeVertical.Page; 
     paragraph = dateIssued.AddParagraph(date); 
    } 
+0

あなたが何を求めているのか不明です。あなたが得たものの画像を表示し、あなたの期待とは異なるものを説明することが役に立ちます。 MCVEもまた助けてくれるでしょう:https://stackoverflow.com/help/mcve –

+0

各形式が何を表示しているかについていくつかの説明を追加しました。私はPDFとしてドキュメント全体を保存しようとしているし、個々のPDFページを個別に印刷しようとしています。イメージを使って各ページを印刷しています(ひどい解決策ですが、より良い方法を見つけることはできません) –

+0

MigraDocとPDFsharp?それを単純なままにし、意図通りにMigraDocを使用してください。コードはPDFに "TEST TEST"を描画する必要があります。あなたは、PDFケースのヘッダーを描画するコードを呼び出さない。 –

答えて

0

画像はdocRenderer.RenderPage(gfx, 1);です。これによりヘッダーがレンダリングされます。

docRenderer.RenderPage(gfx, 1);をPDFと呼ぶことはありません。だから、そこに日付はありません。あなたが先に描くのは "TEST TEST"だけです。

+0

MigraDocウェブサイト上のprintDocument.SelectedPageを取得しているのは、this.pagePreviewを使用していることだけです。ページ。選択したページを他にどのように取得できますか? –

+0

'SelectedPage'を設定してドキュメント全体を印刷しないでください。私が理解するように、とにかくそれには1ページしかありません。 –

+0

ご協力ありがとうございます! –

関連する問題